2013-03-08 94 views
2

我試圖交叉編譯我自己的共享庫(libmystuff.so)針對使用libcurl共享庫的另一個共享庫(libtheirstuff.so),並且獲取以下錯誤:「沒有版本符號的符號版本部分」

libmystuff.so: No symbol version section for versioned symbol 
'[email protected]@CURL_OPENSSL_3' 

,然後依次爲:

​​

通過創建libtheirstuff代碼去,我可以看到,curl_global_init是捲曲的第一參考。

在目標平臺(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 
+0

它可能是你在鏈接庫的順序? – 2013-03-08 23:20:29

+0

我只連接一個庫。請參閱編輯gcc的調用。 – cachance7 2013-03-09 00:39:17

+0

看起來像其他人也有類似的問題。也許需要使用其他版本的捲曲庫,一個與該頭部庫兼容。 – 2013-03-09 01:06:41

回答

0

接頭抓住了錯誤版本的電話。

0

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

$ objdump -x mybinary | grep curl_global_init 
0... F *UND* 0... [email protected]@CURL_OPENSSL_3 

在這種情況下的解決方案是建立在那裏的libcurl編譯了./configure --disable-versioned-symbols的機器上。以這種方式編譯的二進制文件可以在其他地方使用(包括使用版本化符號的系統)。一個便攜式二進制應該產生像這樣的輸出(沒有任何@符號):

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