gpt4 book ai didi

ios - 链接到 OSX 上的 iOS 模拟器二进制文件

转载 作者:可可西里 更新时间:2023-11-01 17:06:11 25 4
gpt4 key购买 nike

我很好奇如果我在 Mac 应用程序中链接到 iOS 模拟器框架会发生什么。所以我将 UIKit 复制到它自己的文件夹中(因此框架搜索路径不会包括所有 iOS 模拟器框架,就像 CoreFoundation 在 Mac 和 iOS 上一样,但有不同的 header ),并将它拖到 Xcode 的链接部分。 Xcode 给我的错误是:

building for MacOSX, but linking against dylib built for iOS Simulator file '/Users/jonathan/Desktop/macuikit/UIKit.framework/UIKit' for architecture x86_64

这两种架构都是 x86_64,所以它怎么知道框架是专门针对 iOS 模拟器的,我在 Info.plist 之类的东西中删除了所有对 iOS 的引用,甚至尝试删除除 UIKit 二进制文件之外的所有内容,但出现了同样的错误.二进制文件本身是否有什么东西告诉链接器它可以在哪个平台上运行,而不仅仅是体系结构?我查看了 Mach-O header ,但只有 CPU 类型和子类型字段,并且都没有预期的模拟器值。

最佳答案

经过一点点挖掘,发现库可以运行的平台确实在二进制文件中指定了。事实上,您可以在您最喜欢的十六进制编辑器中编辑二进制文件,让链接器完全跳过此检查。

此信息未在 Mach-O header 中指定(正如您已经意识到的那样)。相反,它被指定为加载命令类型。您可以通过挖掘 LLVM sources 查看可用的类型.具体来说,枚举值 LC_VERSION_MIN_MACOSXLC_VERSION_MIN_IPHONEOS 看起来很有趣。

现在,在我们的二进制文件中找到它的偏移量。在 MachOView(或任何其他编辑器/查看器或您的选择)中打开相同的内容并记下偏移量:

Finding the Offset

一旦注意到偏移量,在十六进制编辑器中跳转到相同位置并更新它。我将 LC_VERSION_MIN_IPHONEOS (25) 修改为 LC_VERSION_MIN_MACOSX (24)

保存更新并再次尝试链接。错误应该消失。当然,当您尝试实际运行您的示例时,您会遇到其他问题。尽情享受 LLDB 吧:)

关于ios - 链接到 OSX 上的 iOS 模拟器二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28946926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com