3

我有一个 C++ 库和一个 C++ 应用程序,试图使用从库中导出的函数和类。该库构建良好,应用程序编译但无法链接。我得到的错误遵循这种形式:

app-source-file.cpp:(.text+0x2fdb): undefined reference to `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
4

2 回答 2

8

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

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

于 2008-10-19T14:12:10.037 回答
2

已经有一段时间了,但是如果您使用 -l 选项指定一个库,那么您没有跳过 lib 前缀吗?

(为了便于阅读下面的示例,我将名称从“lib-in-question.so”更改为“libfoobar.so”)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

或者

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
于 2008-10-19T14:45:00.767 回答