用于iOS模拟器的dlopen()动态库,在macOS应用程序中

时间:2017-04-28 14:40:35

标签: ios objective-c xcode macos

我有一个"胖"为iOS构建的框架,用于为macOS构建的调试工具。以前我是静态链接这个框架,虽然XCode抱怨它是为模拟器构建的(因为架构是相同的),但它仍然有效。但是现在,库的新版本是动态的,因此该路径不起作用,因为该工具是一个命令行应用程序,它不支持嵌入框架。

我可以把它变成一个应用程序包,似乎是为了解决这个问题,但是我不确定这会带来什么(创建一个新项目?)。我当然可以弄清楚但是......

与此同时,我想我会使用dlopen()等动态加载库并检索我需要的类/方法(我已经有一些代码,至少可以编译)。但是,该调用失败并显示以下消息:

no suitable image found.  Did find:
/<path to library file>: mach-o, but built for simulator (not macOS)

由于静态链接只是一个警告并且实际上有效,是否有办法使dlopen也能正常工作?

在这种情况下,重新编译框架本身不适合我。

1 个答案:

答案 0 :(得分:0)

您在考虑编辑dylib框架的二进制文件吗?如果在Macho-O标题中如此,您可以尝试将LC_VERSION_MIN_IPHONEOS更改为LC_VERSION_MIN_MACOSX。可能这还不够,但对于快速测试来说这是一个简单的更改。这是MachOView中这些加载命令的屏幕截图比较 enter image description here

另请参阅here