2

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

2 回答 2

0

链接器抓取了错误的版本。

于 2013-08-28T04:19:57.313 回答
0

No symbol version section for versioned symbol 'curl_global_init@@CURL_OPENSSL_3'当您尝试编译可在多个 Linux 发行版上运行的二进制文件时,也会出现此问题 ( )。您可以像这样检查问题:

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

这种情况下的解决方案是在 libcurl 已经编译过的机器上构建./configure --disable-versioned-symbols。以这种方式编译的二进制文件将在其他地方工作(包括在使用版本符号的系统上)。一个可移植的二进制文件应该产生这样的输出(没有任何@符号):

$ objdump -x mybinary | grep curl_global_init
0... F *UND*  0... curl_global_init
于 2013-10-14T16:26:50.223 回答