在 Mac OS X 上,DYLD 格式的二进制可执行文件包含指示库加载系统如何处理文件内容的“加载器命令”。特别是,loader 命令指示系统应该在哪里搜索依赖库等。
您可以通过运行“otool -l /path/to/your/app”查看系统上任何二进制文件的加载程序命令的完整列表。
一般来说,这些加载器命令是由“ld”工具在项目编译的链接阶段设置的。
我的问题是,我需要怎么做才能为 ld(显然)不支持的公开类型添加加载器命令?
特别是,我想利用 LC_DYLD_ENVIRONMENT 加载程序命令,它可用于在二进制文件的加载程序命令表中指定一个字符串,该字符串应作为可执行文件上下文中的环境变量设置进行加载和评估。
我没有看到任何对 ld 有帮助的论点。像“-sectcreate”这样的东西,但专门添加到加载器命令的内容,是我所追求的。
我知道这是可能的,因为 Mac OS X 上至少有一个标准应用程序使用它:Safari。但是我不知道他们是否通过对二进制文件进行某种链接后按摩来实现这一点,如果他们使用知道如何构建和链接自定义加载程序命令的自定义版本的 ld,或者他们是否正在利用我无法弄清楚的 ld 命令的通用功能。