代码之家  ›  专栏  ›  技术社区  ›  Charles

linux中外部未定义引用的测试

  •  5
  • Charles  · 技术社区  · 15 年前

    有没有一个内置的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 回复  |  直到 15 年前
        1
  •  2
  •   CB Bailey    15 年前

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