使用-fPIC 重新編譯以實現共享庫相容性
使用庫編譯程式時,確保庫類型和編譯之間的相容性至關重要旗幟。使用 ARM Ubuntu 機器重新安裝 ffmpeg 時會出現這樣一種情況。編譯使用 ffmpeg 函式庫的程式可能會導致以下錯誤:
/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libavcodec.a: could not read symbols: Bad value collect2: ld returned 1 exit status
此錯誤表示函式庫類型和編譯標誌之間不符。 -fPIC 標誌通常在編譯將包含在共享庫 (.so) 中的程式碼時使用。然而,預設情況下,ffmpeg 通常被編譯為靜態函式庫 (.a)。
要解決此問題,您必須使用 -fPIC 標誌重新編譯 ffmpeg。這可以透過在配置ffmpeg時修改編譯選項來完成。為此,請將“--enable-shared”新增至 ./configure 選項。或者,您可以透過新增“--disable-shared”來完全停用共用庫。
進行此變更後,重新編譯 ffmpeg 將產生共用函式庫(.so)而不是靜態函式庫(.a) )。當您編譯使用 ffmpeg 函式庫的程式時,它將能夠成功連結到共用函式庫,解決重定位錯誤。
以上是為什麼使用 ffmpeg 編譯時出現重定位錯誤以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!