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

时间:2015-03-29 21:53:45

标签: macos linker ld dynamic-linking dyld

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

问题是:它真的如此吗?两个连接子?一个静态和一个动态?

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

1 个答案:

答案 0 :(得分:4)

你误解了"链接"的含义。或者,想到另一种方式,你还没有意识到它有两个含义。

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

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

当你声称Linux没有这种区别时,你就错了。 Linux有一个动态加载器ld.so,它与静态链接器ld不同。