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

标签 gcc linker ld

我想知道什么时候应该使用 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/

相关文章:

gcc - Ubuntu上pcre-8.30的编译错误

python - 为什么我不能在Centos 5.5下安装Python 2.7?

c++ - 异常的 Unresolved external symbol 错误

c++ - 对 C++ 中的链接器感到困惑

gcc - 对 `dl_iterate_phdr' 的 undefined reference

linux - 无法链接 python 的共享库

linux - 为什么指定输入库的顺序很重要?

c - 返回函数内部释放的指针

gcc - 如何使用使用 nvcc 编译的 Cuda 共享库来编译 OpenCV 代码?

Facebook-iOS-SDK:如何正确构建框架并将其添加到项目中?