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

Cha*_*les 5 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
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 2

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