OS X 有两个链接器吗?一静态一动态?

den*_*631 4 macos linker dynamic-linking ld dyld

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

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

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

Ken*_*ses 5

您误解了“链接”的含义。或者,换个角度想,你还没有意识到它有两个含义。

如果有帮助,请将其dyld视为动态加载器而不是“链接器”。dyld是将可执行文件引用的动态库加载到进程地址空间的程序。它仍然涉及链接,因为它需要符号引用的解析。

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

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