一直对Xcode编译用到的ld和dyld存有疑问,开始以为都是链接器,简单了解一下发现理解错了。
NAME
dyld - the dynamic linker
DESCRIPTION
The dynamic linker (dyld) checks the following environment variables during the launch of each process.
这是man page显示dyld的定义,很明显ld是链接器而dyld是动态链接器(或许应该成为加载器),或许把dyld理解为dynamic loader更能说明含义。dyld是用于把动态库加载早进程地址空间的程序,因为操作系统的ASLR机制,dyld需要处理内部符号重定位外部符号重绑定,所有它也包含链接能力。但是我们永远也不会调动dyld,你只会只用ld,典型的场景就是编译器会替你调用ld做链接步骤,dyld只会在启动时被调用。当然iOS还存在另外两种dylib加载器,dlsym和dlopen,只是受限于苹果爸爸的审核,这两个加载器不能过审。捎带些私活,NSBundle load本质是调用dlopen,可以在注册制跳转中使用,但是没有UI界面的功能库需要另外处理了。
NAME
ld – linker
DESCRIPTION
The ld command combines several object files and libraries, resolves
references, and produces an output file. ld can produce a final linked
image (executable, dylib, or bundle), or with the -r option, produce
another object file. If the -o option is not used, the output file
produced is named "a.out".
上面是man page对ld的定义,ld是链接器,用来处理静态链接或是动态链接。
网友评论