加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在OSX上链接到iOS模拟器二进制文件

发布时间:2020-12-14 17:13:08 所属栏目:百科 来源:网络整理
导读:我很好奇如果我在Mac应用程序中链接到iOS模拟器框架会发生什么.因此我将UIKit复制到它自己的文件夹(因此框架搜索路径不会包含所有iOS模拟器框架,就像CoreFoundation在Mac和iOS上都有不同的标题),并将其拖入 Xcode的链接部分. Xcode给我的错误是: building f
我很好奇如果我在Mac应用程序中链接到iOS模拟器框架会发生什么.因此我将UIKit复制到它自己的文件夹(因此框架搜索路径不会包含所有iOS模拟器框架,就像CoreFoundation在Mac和iOS上都有不同的标题),并将其拖入 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标头但是只有CPU类型和子类型的字段,并且没有按预期的模拟器值.

解决方法

经过一些挖掘后,事实证明可以运行库的平台确实在二进制文件中指定.实际上,您可以在您喜欢的Hex编辑器中编辑二进制文件,并使链接器完全跳过此检查.

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

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

注意到偏移量后,在Hex编辑器中跳转到相同的位置并更新它.我将LC_VERSION_MIN_IPHONEOS(25)修改为LC_VERSION_MIN_MACOSX(24)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读