xcode - 如何安装 ld 未明确支持的 DYLD 加载器命令?

标签 xcode macos darwin dyld

在 Mac OS X 上,DYLD 格式的二进制可执行文件包含“加载器命令”,指示库加载系统如何处理文件的内容。特别是,加载器命令指示系统应在何处搜索依赖库等。

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

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

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

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

我没有看到任何 ld 的论据可以促进这一点。我想要的是类似“-sectcreate”但专门添加到加载器命令内容的东西。

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

最佳答案

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

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

关于xcode - 如何安装 ld 未明确支持的 DYLD 加载器命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188698/

相关文章:

xcode - 如何禁用某些文件或子项目的 Xcode 索引?

iphone - 如何在 xcode 4.2.1 控制台窗口中显示日志消息

c - OSX 上的 SIGTTOU/SIGTTIN 调用 tcsetpgrp()

ios - 为什么我可以返回一个返回类型为 AnyObject 的 bool 值?使用 UIKit 而不是使用 Darwin

ios - Xcode iPhone SDK - 开始时保持 NSInteger 为零

java - 在 Java 中使用 OS X 10.8 通知中心 (NSUserNotification)

macos - CMake:FIXUP_BUNDLE 在 OS X 上创建空框架

macos - 在 Mac OS X 上使用不同的配置文件打开多个 firefox 实例

ios - Darwin /引用手册页丢失

iphone - 简单的 Cocos2d Iphone 游戏。只是一些基本的问题