首頁 >後端開發 >C++ >為什麼使用 ffmpeg 編譯時出現重定位錯誤以及如何修復它?

為什麼使用 ffmpeg 編譯時出現重定位錯誤以及如何修復它?

Barbara Streisand
Barbara Streisand原創
2024-11-08 04:21:01508瀏覽

Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

使用-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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn