我想知道什么时候应该使用 ld 链接器而不是 gcc。我刚刚用 C++ 写了一个简单的 hello world,当然我包括 iostream 库。如果我想用 gcc 制作一个二进制文件,我只需使用:
g++ hello hello.cpp
我已经得到了我的二进制文件。
后来我尝试使用ld链接器。为了获取目标文件,我使用:
g++ -c hello.cpp
。好吧,这很简单,但是链接命令太长了:
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 链接器具有优势的情况。
最佳答案
正如您所提到的,gcc 仅在链接时充当 ld 的前端;它传递所有链接器指令(选项、默认/系统库等),并通过为您处理所有这些特定于工具链的详细信息来确保所有内容都能很好地组合在一起。
我认为最好将 GNU 工具链视为一个完整的、紧密集成的环境(任何具有为某些奇异嵌入式平台构建工具链(例如集成 Dietlibc)经验的人都可能会同意)。
除非您有一些非常具体的平台集成要求,或者有理由不使用 gcc,否则我几乎想不出直接调用 ld
进行链接有什么优势。您可能需要的任何额外的特定于链接器的选项都可以使用 gcc 命令行上的 -Wl,
前缀轻松指定(如果尚未作为普通 gcc 选项提供)。
关于gcc - 我什么时候应该使用 ld 而不是 gcc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680470/