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 您的程序,它会代表您调用 ld
。 dyld
仅在 运行 次使用。
当您断言 Linux 没有这种区别时,您是不正确的。 Linux 有一个动态加载器 ld.so
,它不同于静态 linker ld
.
问题是,我发现 Mac OS X 有一个 dyld(我理解为动态链接器)还有一个简单的链接器 ld(我理解为静态链接器) ).
问题是:真的是这样吗?两个链接器?一静一动?
为什么他们决定要两个? Linux 只有一个链接器 (ld),它同时进行静态和动态链接。
你误解了"linking"的意思。或者,换个思路,你还没有意识到它有两个意思。
如果有帮助,请将 dyld
视为动态 loader 而不是 "linker"。 dyld
是将可执行文件引用的动态库加载到进程地址 space 的程序。它仍然涉及 linking,因为它需要解析符号引用。
您永远不会调用 dyld
作为构建过程的一部分。您总是使用 ld
,或者更常见的是,您要求编译器 link 您的程序,它会代表您调用 ld
。 dyld
仅在 运行 次使用。
当您断言 Linux 没有这种区别时,您是不正确的。 Linux 有一个动态加载器 ld.so
,它不同于静态 linker ld
.