- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我很好奇如果我在 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_MACOSX
和 LC_VERSION_MIN_IPHONEOS
看起来很有趣。
现在,在我们的二进制文件中找到它的偏移量。在 MachOView
(或任何其他编辑器/查看器或您的选择)中打开相同的内容并记下偏移量:
一旦注意到偏移量,在十六进制编辑器中跳转到相同位置并更新它。我将 LC_VERSION_MIN_IPHONEOS
(25) 修改为 LC_VERSION_MIN_MACOSX
(24)
保存更新并再次尝试链接。错误应该消失。当然,当您尝试实际运行您的示例时,您会遇到其他问题。尽情享受 LLDB
吧:)
关于ios - 链接到 OSX 上的 iOS 模拟器二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28946926/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!