【问题标题】:gcc linker: which input libraries are used?gcc 链接器:使用了哪些输入库?
【发布时间】:2014-01-31 19:06:34
【问题描述】:

我正在调试一些链接器问题(“未定义引用”对应该在我正在链接的库中的符号),我不确定编译器是否使用了正确的共享库。

我要查找的输出类似于ldd 生成的输出,即具有完整路径的库列表...但我不能使用 ldd,因为在生成任何输出之前编译失败。

到目前为止,我最接近的是转储库搜索路径并一一检查有问题的共享库的目录;我想知道这是否是一种更好的方法?

【问题讨论】:

    标签: c++ gcc linker


    【解决方案1】:

    我正在调试一些链接器问题

    如果您显示实际错误和您使用的链接命令行,您会得到很多更好的答案。

    你很可能做了这样的事情:

    gcc -lfoo main.c
    

    其中libfoo.so 是定义必要符号的库。阅读this 了解上述命令行错误的原因。

    但我不能使用 ldd,因为在产生任何输出之前编译失败

    您之前的声明说您的 链接阶段 失败。编译和链接不是一回事,请勿混淆。

    我想知道这是否是一种更好的方法

    要了解链接器正在使用哪些库,请阅读man ld。在 UNIX 系统上,此命令可能会提供更好的方法:

    gcc ... -Wl,-t
    

    附:另请注意,没有“gcc 链接器”之类的东西——它们是完全不同的工具。

    【讨论】:

    • 感谢您不仅回答了这个问题(-Wl,-t 完全符合我的要求),而且还指出它毕竟是错误的问题。 “链接器如何查看命令行”链接真的很有用,我只是用它来修复另一个链接器错误...
    【解决方案2】:

    您可以使用gcc -v 详细标志使 gcc 在编译和链接代码时吐出它正在执行的所有操作。

    它将向您显示链接器搜索它们的实际库的路径,并标记它用于编译您的代码。

    【讨论】:

    • 确实,它是有用的信息,而且比我以前拥有的更多,但它实际上并没有打印库路径。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多