什么时候我应该使用ld而不是gcc?

什么时候我应该使用ld而不是gcc?,gcc,linker,ld,Gcc,Linker,Ld,我想知道什么时候我应该使用ld链接器而不是关闭gcc。我刚在C++写了一个简单的Hello World,当然我也包括了IoStand库。如果我想使用gcc生成二进制文件,我只需使用: g++你好.cpp 我有我的二进制文件 后来我尝试使用ld链接器。要获取对象文件,我使用: g++-c hello.cpp。好的,这很简单,但是link命令太长了: ld -o hello.out hello.o \ -L /usr/lib/gcc/x86_64-linux-gnu/4.8.4/ \

我想知道什么时候我应该使用ld链接器而不是关闭gcc。我刚在C++写了一个简单的Hello World,当然我也包括了IoStand库。如果我想使用gcc生成二进制文件,我只需使用:

g++你好.cpp
我有我的二进制文件

后来我尝试使用ld链接器。要获取对象文件,我使用:
g++-c hello.cpp
。好的,这很简单,但是link命令太长了:

ld -o hello.out  hello.o \
   -L /usr/lib/gcc/x86_64-linux-gnu/4.8.4/ \
   /usr/lib/gcc/x86_64-linux-gnu/4.8.4/crtbegin.o \
   /usr/lib/gcc/x86_64-linux-gnu/4.8.4/crtend.o \
   /usr/lib/x86_64-linux-gnu/crti.o \
   /usr/lib/x86_64-linux-gnu/crtn.o \
   /usr/lib/x86_64-linux-gnu/crt1.o \
   -dynamic-linker /lib64/ld-linux-x86-64.so.2 -lstdc++ -lc 
我知道,
gcc
使用ld。
使用
gcc
在所有情况下都更好,还是仅在大多数情况下更好?请告诉我一些关于ld linker有优势的案例

如您所述,gcc仅在链接时充当ld的前端;它传递所有链接器指令(选项、默认/系统库等),并通过为您处理所有这些特定于工具链的细节,确保所有内容都很好地结合在一起

<> P>我认为最好把GNU工具链看作一个整体,紧密集成的环境(如任何有经验的构建工具链的一些异国的嵌入式平台,比如说,dieLiBC集成可能会同意)。
除非您有一些非常具体的平台集成需求,或者有理由不使用gcc,否则我很难想到直接调用
ld
进行链接有什么好处。您可能需要的任何额外链接器特定选项都可以在gcc命令行上用
-Wl,
前缀指定(如果不是普通的gcc选项)。

这主要是一个品味问题:当命令行比使用
gcc
更简单时,您可以直接使用
ld
。当您仅使用链接器操作少量共享对象时,例如,创建一个具有少量依赖项的共享库


因为您可以通过
-Wl
选项将选项传递给
ld
,所以人们通常会建议只使用
gcc
来管理命令行。

只有在不使用gcc的情况下,直接使用链接器才有很大的优势。否则,使用
gcc
g++
将为您节省大量的打字时间,更重要的是,在准确确定您需要键入的内容和时间时,您会感到非常痛苦。谢谢,我担心我没有注意到ld的任何有用用法。顺便说一句,你可以使用
g++-v-o hello.cpp
链接哪些库。所有关于链接文件/自由库的函数,我都可以使用gcc设置?问题是,对象文件、库和选项的列表将根据您使用的gcc选项、您使用的操作系统、gcc的版本以及其他可能的因素而变化。请注意,您可以通过使用类似于
GCC-o hello.o
的命令链接使用GCC创建的对象文件。总之,我理解正确,ld为您提供了对链接文件的更多控制/知识?更多的是GCC保证了一个良好、无痛苦的集成(请参阅@RossRidge对涉及的多个因素的评论). 您可能需要的任何ld选项仍然可以使用
-Wl,
通过gcc。