2013-03-08 57 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