假设我正在编译一些非常复杂的项目,其中包含数百万行代码。它由于无法找到(某些)库(.h 或 .so 文件)而失败,使用如下代码:
#include <mymodule/mylibrary.h>
如何在可读输出中让链接器告诉我它在哪里寻找库? 我想要一个目录/路径列表,而不仅仅是
no such file or directory
,不知道为什么。
另外,我希望最后的斜杠非常清楚......我不想忽略实际路径中的双斜杠,并最终浪费时间在其他地方寻找问题(如果可能的话) .
我相信如果您在链接器选项中添加“-t --verbose”,您会得到您想要的东西。我不是 Linux 和 ld 专家,但这就是我使用这些选项时看到的情况:
-t 列出找到的符号以及位置。
--verbose 使链接器向您显示有关其配置的各种有用信息。特别是,它会向您显示“COMPILER_PATH=”和“LIBRARY_PATH=”部分,告诉您搜索头文件和库的文件夹列表
例如,在我的计算机上,-t选项生成如下行:
-lXt (/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libXt.so)
Xt 是我链接的库之一。这行告诉我链接器找到 libXt.so 的路径。
另外,--verbose 给了我这些:
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
它们具有头文件和库的默认包含文件夹。
我使用 makefile 来编译我的程序,因此我使用这一行添加了这些链接器选项:
LDFLAGS += -t --verbose