当前位置:  开发笔记 > 编程语言 > 正文

GCC和ld找不到导出的符号......但它们就在那里

如何解决《GCC和ld找不到导出的符号但它们就在那里》经验,为你挑选了1个好方法。

我有一个C++库和一个C++应用程序,试图使用从库中导出的函数和类.库构建正常,应用程序编译但无法链接.我得到的错误遵循以下形式:

app-source-file.cpp :(.text + 0x2fdb):对`lib-namespace :: GetStatusStr(int)'的未定义引用

链接器似乎可以很好地解决库中的类,但是自由函数和导出的数据(如余弦查找表)总是会导致上述错误.

我使用的是Ubuntu 8.04(Hardy),它是最新的Ubuntu软件包.

链接库的命令是(删除了其他库):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

链接应用程序的命令是(删除了其他库):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

最后,看来(尽我所知)有问题的符号正在正确导出:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi

PiedPiper.. 8

nm输出中的_ZN3lib-namespace12GetStatusStrEi之前的U表明该符号在库中未定义.

也许它是在错误的命名空间中定义的:它看起来像是在lib-namepace中调用它,但你可能在另一个命名空间中定义它.



1> PiedPiper..:

nm输出中的_ZN3lib-namespace12GetStatusStrEi之前的U表明该符号在库中未定义.

也许它是在错误的命名空间中定义的:它看起来像是在lib-namepace中调用它,但你可能在另一个命名空间中定义它.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有