首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“版本化符号没有符号版本部分”

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

Stack Overflow用户
提问于 2013-03-09 06:46:26
回答 2查看 1.8K关注 0票数 2

我正在尝试对使用libcurl共享库的另一个共享库(libtheirstuff.so)交叉编译我自己的共享库(libmystuff.so),并得到以下错误:

代码语言:javascript
复制
libmystuff.so: No symbol version section for versioned symbol 
'curl_global_init@@CURL_OPENSSL_3'

然后是:

代码语言:javascript
复制
final link failed: Nonrepresentable section on output.

浏览一下创建库的代码,我可以看到curl_global_init是对curl的第一个引用。

在目标平台(arm5)上执行ldd libtheirstuff.so显示它可以找到所有引用。

这里发生了什么事?

编辑:以下是对gcc的电话

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 12:19:57

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

票数 0
EN

Stack Overflow用户

发布于 2013-10-15 00:26:50

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

代码语言:javascript
复制
$ objdump -x mybinary | grep curl_global_init
0... F *UND*  0... curl_global_init@@CURL_OPENSSL_3

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

代码语言:javascript
复制
$ objdump -x mybinary | grep curl_global_init
0... F *UND*  0... curl_global_init
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15304627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档