g ++链接库ld没有

时间:2014-02-15 10:03:57

标签: c++ compiler-construction g++ ld

我想知道为什么

g++ test1.o test2.o -o test.x -lgtk-x11-2.0

有效,而

ld 'r test1.o test2.o -o test.o -lgtk-x11-2.0

给出:

ld: cannot find -lgtk-x11-2.0

除非我明确包含添加-L/usr/lib/i386-linux-gnu

的路径

我尝试了添加$LD_LIBRARY_PATHld.so.conf路径的所有内容,但没有任何效果,我无法解释两次调用之间的区别。

在ld的手册中指定:

  

搜索的默认路径集(未指定为“-L”)取决于ld正在使用的仿真模式,在某些情况下还取决于它的配置方式

但尝试不同的模拟(通过使用-m * emulation *)意味着segfaulting(可能是因为默认模拟elf_i386,是正确的模拟)。

你能帮助我阐明一下这个话题吗?

2 个答案:

答案 0 :(得分:1)

gcc -print-search-dirs(或g++)显示编译器使用的库搜索路径; /usr/lib/i386-linux-gnu可能是内置的。此选项通过gcc传递给链接器,但不是内置于链接器。

尝试添加-vg++ -v test1.o test2.o -o test.x -lgtk-x11-2.0 看看如何调用链接器。

答案 1 :(得分:1)

如果您对ld

使用的路径感到好奇
ld --verbose | grep SEARCH

通常您不希望明确地使用ld进行链接,单独使用gcc执行每项任务可能会更好,而您应该优先选择后者而不是前者。

如果您想了解有关gcc设置

的更多信息
gcc -dumpspecs

让你体会一下,看看gcc的内部结构是什么感觉,如果你认真对待这个问题,你最终可能会看一下gcc手册,但是我不要认为这只是为了它而做的事情。

编译gcc时定义的设置也很重要,因此如果您真的想了解内部的工作原理,还应该学习如何从源代码编译gcc

TL;博士

只需使用gcc进行编译和链接,其他选项可能不值得。