首頁 >後端開發 >C++ >為什麼我會收到錯誤「建立共享物件時不能使用針對『本地符號』的重定位 R_ARM_MOVW_ABS_NC」?

為什麼我會收到錯誤「建立共享物件時不能使用針對『本地符號』的重定位 R_ARM_MOVW_ABS_NC」?

Barbara Streisand
Barbara Streisand原創
2024-11-08 07:00:02800瀏覽

Why do I get the error

在ARM Ubuntu 機器上使用-fPIC 標誌重新編譯

在ARM Ubuntu 機器上重建FFmpeg 時,可能會遇到錯誤:

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

此錯誤表明系統正在嘗試將靜態庫與動態庫鏈接,這是不相容的。要解決此問題,需要使用 -fPIC 標誌重新編譯有問題的函式庫,例如 FFmpeg。

重新編譯過程

可以採取以下步驟使用-fPIC 標誌重新編譯過程

  1. 編輯庫的源代碼:找到並開啟導致重定位錯誤的程式庫的原始程式碼檔案。
  2. 新增 -fPIC 標誌: 將 -fPIC 標誌新增至原始程式碼中指定的編譯器選項。此標誌指示編譯器產生位置無關程式碼 (PIC),適合動態連結。
  3. 重新編譯函式庫: 使用更新的編譯器選項重新建置函式庫。這通常可以使用 make 命令來完成。
  4. 安裝重新編譯的函式庫:使用 PIC 重新編譯函式庫後,應將其安裝到系統的函式庫目錄中。這將使它可以與其他程式連結。

FFmpeg 的具體範例

對於FFmpeg,可以使用以下命令重新編譯它: -fPIC 標誌:

./configure --enable-shared --disable-static
make

透過新增--enable-shared 標誌,將產生共享庫而不是靜態庫。 --disable-static 標誌確保不建置靜態函式庫。

使用這些選項重建 FFmpeg 後,可以使用 make install 將重新編譯的函式庫安裝到適當的系統目錄中。這將使啟用 PIC 的 FFmpeg 函式庫可供其他程式連結和使用。

以上是為什麼我會收到錯誤「建立共享物件時不能使用針對『本地符號』的重定位 R_ARM_MOVW_ABS_NC」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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