如何安装ld未明确支持的DYLD加载程序命令?

dan*_*ass 10 macos xcode darwin dyld

在Mac OS X上,DYLD格式的二进制可执行文件包含"加载程序命令",用于指示库加载系统如何处理文件的内容.特别是,loader命令指示系统应该搜索依赖库,等等.

您可以通过运行"otool -l/path/to/your/app"查看系统上任何二进制文件的加载程序命令的完整列表.

一般来说,这些加载器命令是在项目编译的链接阶段由"ld"工具设置的.

我的问题是,我需要做什么才能为ld不支持(显然)的公开类型添加加载程序命令?

特别是,我想利用LC_DYLD_ENVIRONMENT加载器命令,该命令可用于在二进制文件的加载程序命令表中指定一个字符串,该字符串应加载并在可执行文件的上下文中作为环境变量设置进行评估.

我没有看到任何有助于此的论点.像"-sectcreate"这样的东西,但是为了特别添加到加载器命令的内容,就是我所追求的.

我知道这是可能的,因为Mac OS X上至少有一个标准应用程序使用它:Safari.但我不知道他们是否通过对二进制文件进行某种后链接按摩来实现这一点,如果他们使用自定义版本的ld知道如何构建和链接自定义加载器命令,或者他们是否正在利用ld命令的一般purpopse功能,我一直无法弄清楚.

小智 14

看起来你可以使用-dyld_env,如下所示:"-dyld_env DYLD_FRAMEWORK_PATH = /".手册页中没有记录,但可以在ld64的Options.cpp中找到,并在Changelog文件中提到.如果您正尝试从Xcode执行此操作,您可能必须这样做:" - Xlinker -dyld_env -Xlinker DYLD_FRAMEWORK_PATH = /".

有一点需要注意:如果你看看dyld的dyld.cpp,你会发现它只允许以DYLD_开头并以_PATH结尾的环境变量.


Ned*_*ily 8

如果您的可执行文件是作为标准OS X应用程序包(即可由用户启动的.app)的一部分构建的,则指定应用程序特定环境变量的传统方法是使用LSEnvironment密钥通过其plist文件.有关更多信息,请参见此处