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

pexxcrt2  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(140)

我想知道什么时候我应该使用ld链接器而不是关闭gcc
我只是用c++写了一个简单的hello world,当然我包含了iostream库。如果我想用gcc创建一个二进制文件,我只需要用途:g++ hello hello.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链接器有优势的情况。

busg9geu

busg9geu1#

正如你提到的,GCC只是在链接时充当LD的前端;它传递所有的链接器指令(选项、默认/系统库等),并通过为您处理所有这些特定于工具链的细节来确保所有内容都很好地结合在一起。
我相信最好把GNU工具链看作一个整体,紧密集成的环境(任何有过为一些外来的嵌入式平台构建工具链的经验的人,比如说dietlibc集成,可能都会同意)。
除非您有一些非常具体的平台集成需求,或者有不使用gcc的理由,否则我很难想到直接调用ld进行链接有什么好处。您可能需要的任何额外的特定于链接器的选项都可以很容易地在gcc命令行上使用-Wl,前缀指定(如果还没有作为普通gcc选项提供)。

koaltpgm

koaltpgm2#

这主要是一个品味的问题:当命令行比gcc简单时,您可以直接使用ld。这是当你只是使用链接器来操作少量的共享对象时,例如,创建一个具有很少依赖关系的共享库。
因为可以通过-Wl选项将选项传递给ld,所以人们通常会建议只使用gcc来管理命令行。

相关问题