【发布时间】:2014-01-31 19:06:34
【问题描述】:
我正在调试一些链接器问题(“未定义引用”对应该在我正在链接的库中的符号),我不确定编译器是否使用了正确的共享库。
我要查找的输出类似于ldd 生成的输出,即具有完整路径的库列表...但我不能使用 ldd,因为在生成任何输出之前编译失败。
到目前为止,我最接近的是转储库搜索路径并一一检查有问题的共享库的目录;我想知道这是否是一种更好的方法?
【问题讨论】:
我正在调试一些链接器问题(“未定义引用”对应该在我正在链接的库中的符号),我不确定编译器是否使用了正确的共享库。
我要查找的输出类似于ldd 生成的输出,即具有完整路径的库列表...但我不能使用 ldd,因为在生成任何输出之前编译失败。
到目前为止,我最接近的是转储库搜索路径并一一检查有问题的共享库的目录;我想知道这是否是一种更好的方法?
【问题讨论】:
我正在调试一些链接器问题
如果您显示实际错误和您使用的链接命令行,您会得到很多更好的答案。
你很可能做了这样的事情:
gcc -lfoo main.c
其中libfoo.so 是定义必要符号的库。阅读this 了解上述命令行错误的原因。
但我不能使用 ldd,因为在产生任何输出之前编译失败
您之前的声明说您的 链接阶段 失败。编译和链接不是一回事,请勿混淆。
我想知道这是否是一种更好的方法
要了解链接器正在使用哪些库,请阅读man ld。在 UNIX 系统上,此命令可能会提供更好的方法:
gcc ... -Wl,-t
附:另请注意,没有“gcc 链接器”之类的东西——它们是完全不同的工具。
【讨论】:
您可以使用gcc -v 详细标志使 gcc 在编译和链接代码时吐出它正在执行的所有操作。
它将向您显示链接器搜索它们的实际库的路径,并标记它用于编译您的代码。
【讨论】: