我什么时候应该使用 ld 而不是 gcc?
When i should use ld instead of gcc?
我想知道什么时候应该使用 ld linker 而不是 gcc。我只是用 C++ 写了一个简单的 hello world,当然我包括了 iostream 库。如果我想用 gcc 创建一个二进制文件,我只需要使用:
g++ hello hello.cpp
我有我的二进制文件。
后来我尝试使用ld linker。要获取目标文件,我使用:
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 在 link 时仅充当 ld 的前端;它传递了所有 linker 指令(选项、default/system 库等),并通过处理所有这些 特定于工具链的 [=19] 来确保一切都很好地组合在一起=] 详情给你。
我认为最好将 GNU 工具链视为一个整体,紧密集成的环境(因为任何具有为某些奇特的嵌入式平台构建工具链的经验的人,例如,集成 dietlibc 的人可能会同意)。
除非您有一些非常具体的平台集成要求,或者有不使用 gcc 的理由,否则我几乎想不出为 linking 直接调用 ld
有什么好处。您可能需要的任何额外的 linker-specific 选项都可以在 gcc 命令行上使用 -Wl,
前缀轻松指定(如果还没有作为普通 gcc 选项提供)。
这主要是个人喜好问题:当命令行比使用 gcc
更简单时,您会直接使用 ld
。那就是当您只是使用链接器来操作少量共享对象时,例如,创建一个几乎没有依赖项的共享库。
因为您可以通过 -Wl
选项将选项传递给 ld
,所以通常人们会建议只使用 gcc
来管理命令行。
我想知道什么时候应该使用 ld linker 而不是 gcc。我只是用 C++ 写了一个简单的 hello world,当然我包括了 iostream 库。如果我想用 gcc 创建一个二进制文件,我只需要使用:
g++ hello hello.cpp
我有我的二进制文件。
后来我尝试使用ld linker。要获取目标文件,我使用:
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 在 link 时仅充当 ld 的前端;它传递了所有 linker 指令(选项、default/system 库等),并通过处理所有这些 特定于工具链的 [=19] 来确保一切都很好地组合在一起=] 详情给你。
我认为最好将 GNU 工具链视为一个整体,紧密集成的环境(因为任何具有为某些奇特的嵌入式平台构建工具链的经验的人,例如,集成 dietlibc 的人可能会同意)。
除非您有一些非常具体的平台集成要求,或者有不使用 gcc 的理由,否则我几乎想不出为 linking 直接调用 ld
有什么好处。您可能需要的任何额外的 linker-specific 选项都可以在 gcc 命令行上使用 -Wl,
前缀轻松指定(如果还没有作为普通 gcc 选项提供)。
这主要是个人喜好问题:当命令行比使用 gcc
更简单时,您会直接使用 ld
。那就是当您只是使用链接器来操作少量共享对象时,例如,创建一个几乎没有依赖项的共享库。
因为您可以通过 -Wl
选项将选项传递给 ld
,所以通常人们会建议只使用 gcc
来管理命令行。