出現錯誤“使用 -fPIC 重新編譯”

出現錯誤“使用 -fPIC 重新編譯”

在 CentOS 中輸入星號後,./configure我輸入 make 指令,但出現以下錯誤

/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/liblua.a: could not read symbols: Bad value

我嘗試了這個./configure CFLAGS=-fPIC,但得到了與上面相同的錯誤。

答案1

此時,在星號中,您正在嘗試建立一個動態庫。由於該動態庫可以載入到任何記憶體位置,因此所有內容都需要可重定位。此-fPIC標誌表示位置無關代碼,該代碼獨立於加載位置 - 加載到任何地方。

作為 asterisk 動態庫建構的一部分,它試圖引入 Lua 解釋器。由於它引入了動態庫,因此它需要編譯 PIC 的所有內容。但是你使用的是 lua 的靜態函式庫,它是不是使用 -fPIC 建置。它拒絕這一點,因為靜態庫中的 lua 物件無法重新定位。

順便一提:這就是為什麼添加-fPIC到星號構建沒有幫助的原因。不相容的不是您的星號代碼物件(-fPIC 會影響),而是 liblua.a,特別是 liblua.a 所攜帶的物件(例如 lapi.o)。此外,您正在建立一個動態庫,並且我確信您已經擁有可重定位的程式碼標誌,例如用於您當時嘗試組合在一起的星號物件的 -fPIC 。

我看到三種解決方案。

  • 一種是從你的構建中刪除 lua。如果您不是特別需要它,並且更多地考慮“以後玩起來可能會很有趣”,您可能能夠並且不會失去想要的功能。

  • 另一種方法是取得 liblua 的動態版本,liblua.so它可以在您的 asterisk 建置中引用。我不知道你的發行版,所以我無法說出如何取得它。

  • 另一種更麻煩的方法是使用 -fPIC 重建 lua 和 liblua.a。你可能會遇到相容性問題,因為建立標誌不一致(你製作的內容和磁碟上的其他內容),所以我認為找到一個 liblua.so 來匹配你目前建立的 lua 是更好的選擇。

如果您找到 liblua.so,您可能需要查看“-rpath”連結器標誌,特別是“-Wl,-rpath,/path/to/lua/libs”

相關內容