“版本化符号没有符号版本部分”

时间:2013-03-08 22:46:26

标签: c linux gcc curl cross-compiling

我正在尝试将我自己的共享库(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

2 个答案:

答案 0 :(得分:0)

Linker正在抓错版本。

答案 1 :(得分:0)

当您尝试编译可在多个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