簡體   English   中英

“沒有符號版本的版本符號”

[英]“No symbol version section for versioned symbol”

我試圖將我自己的共享庫(libmystuff.so)與另一個使用libcurl共享庫的共享庫(libtheirstuff.so)交叉編譯,並收到以下錯誤:

libmystuff.so: No symbol version section for versioned symbol 
'curl_global_init@@CURL_OPENSSL_3'

然后是:

final link failed: Nonrepresentable section on output.

通過創建libtheirstuff的代碼,我可以看到curl_global_init是對curl的第一個引用。

在目標平台(arm5)上執行ldd libtheirstuff.so ,表明它可以找到所有引用。

這里發生了什么?

編輯:這是對gcc的調用

arm-none-linux-gnueabi-gcc -fPIC -c mystuff_impl.c -o mystuff_impl.o -I/home/me/arm/include
arm-none-linux-gnueabi-gcc -shared -Wl,soname=libmystuff.so -o libmystuff.so.0.1 mystuff_impl.o -L/home/me/arm/lib -ltheirstuff

鏈接器獲取的版本錯誤。

當您嘗試編譯可在多個Linux發行版上運行的二進制文件時,也會出現此問題( No symbol version section for versioned symbol 'curl_global_init@@CURL_OPENSSL_3' )。 您可以像這樣檢查問題:

$ objdump -x mybinary | grep curl_global_init
0... F *UND*  0... curl_global_init@@CURL_OPENSSL_3

這種情況下的解決方案是在使用./configure --disable-versioned-symbols編譯libcurl的計算機上構建。 以這種方式編譯的二進制文件將在其他地方使用(包括在使用版本化符號的系統上)。 一個可移植的二進制文件應該產生這樣的輸出(不帶任何@符號):

$ objdump -x mybinary | grep curl_global_init
0... F *UND*  0... curl_global_init

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM