在Linux中测试外部未定义引用

时间:2010-05-03 21:11:47

标签: c++ linux linker

是否有内置的linux实用程序可用于测试新编译的共享库以获取外部未定义的引用? Gcc似乎足够聪明,可以在我自己的二进制文件中检查未定义的符号,但如果符号是对另一个库的引用,则gcc不会在链接时检查。相反,当我尝试从另一个程序链接到我的新库时,我只收到消息。

当我编译一个不同的项目时,在库中获取未定义的引用消息似乎有点傻了所以我想知道在构建库时是否可以对内部和外部的所有引用进行检查而不是在链接到它

示例错误:

make -C  UnitTests debug
make[1]: Entering directory `~/projects/Foo/UnitTests`
g++ [ tons of objects ] -L../libbar/bin -lbar -o UnitTests
libbar.so: undefined reference to `DoSomethingFromAnotherLibrary`
collect2: ld returned 1 exit status
make[1]: *** [~/projects/Foo/UnitTests] Error 1

1 个答案:

答案 0 :(得分:2)

通常,链接共享对象时允许使用未定义的引用,但如果链接的目标文件中存在未定义的符号,则可以使链接器生成错误,以通过向{1}}提供-z defs来创建共享库。链接器(或调用链接器的gcc命令中的等效-Wl,-z,defs)。