OS X 是否有两个链接器?一静一动?

Does OS X have two linkers ? One static and one dynamic?

问题是,我发现 Mac OS X 有一个 dyld(我理解为动态链接器)还有一个简单的链接器 ld(我理解为静态链接器) ).

问题是:真的是这样吗?两个链接器?一静一动?

为什么他们决定要两个? Linux 只有一个链接器 (ld),它同时进行静态和动态链接。

你误解了"linking"的意思。或者,换个思路,你还没有意识到它有两个意思。

如果有帮助,请将 dyld 视为动态 loader 而不是 "linker"。 dyld 是将可执行文件引用的动态库加载到进程地址 space 的程序。它仍然涉及 linking,因为它需要解析符号引用。

您永远不会调用 dyld 作为构建过程的一部分。您总是使用 ld,或者更常见的是,您要求编译器 link 您的程序,它会代表您调用 lddyld 仅在 运行 次使用。

当您断言 Linux 没有这种区别时,您是不正确的。 Linux 有一个动态加载器 ld.so,它不同于静态 linker ld.