![]() |
1
2
在链接期间,链接器会搜索它知道的所有库路径,并查找依赖于arch的库名称,在Linux上,在Mac“libfoo.dylib”上“-l foo”会搜索“libfoo.so”。现在,如果您查看/usr/lib中的示例,您会注意到有许多符号链接。例如,如果您有libfoo.so.1.2.3,那么还应该有符号链接libfoo.so.1.2->libfoo.so.1.2.3,libfoo.so.1->libfoo.so.1.2和libfoo.so->libfoo.so.1。这背后的想法是支持各种版本。因此,如果您需要知道使用了哪个文件,我建议您这样做: 将“-v”添加到LDFLAGS或直接添加到gcc调用中。这将导致gcc输出有噪声,有趣的是调用“collect2”。它有各种各样的论点-我。。。这些是链接器搜索库的目录。你也会看到-我(小写(ell)。您需要查看-L中给出的库的-L目录并遵循它们的符号链接。
如果您需要知道在运行时使用哪个库:那就容易多了。快跑
|
![]() |
2
1
查看此处发生的情况的最佳方法是检查gcc(编译器和链接器)正在操作的文件: strace-f-e trace=open-o strace\u输出(您的\u gcc\u命令) '-f'需要跟随子进程,因为gcc就是这样工作的。我发现这个方法非常有用,因为我可以准确地找出链接器连接到我的可执行文件中的库。我只希望gcc-v这么冗长。 |
![]() |
3
0
还要注意,在OSX上,如果设置环境变量
|
![]() |
adversarr · 全局变量何时导出到可执行文件? 11 月前 |
![]() |
Jip Helsen · 在c中导入链接器地址 1 年前 |
![]() |
Petr Skocik · 与定制的pcc链接 1 年前 |
|
KRISHNAKANT MALI · 预处理器和链接器功能中的歧义 1 年前 |
![]() |
ihdv · 在c++编译中,提供链接库路径的linux命令是什么? 1 年前 |
![]() |
Hans · 避免在C++中优化未使用的变量? 1 年前 |