如何将 Android NDK 库编译为静态 iOS 库



我有一个C++代码库,我们的Android项目通过JNI使用它(构建脚本等都是特定于Android的)。我需要用它更新我们的 Objective C 项目,该项目使用的是同一库的旧版本。问题是我只有 Objective C 代码,但没有旧的 C++ 代码和 iOS makefile(它们是由外部机构完成的)——只有一个二进制 .a 文件。如何从 JNI 代码生成这样的静态 iOS 库,从哪里开始?我现在正在阅读这篇文章:http://www.clintharris.net/2009/iphone-app-shared-libraries/,如果您有兴趣提供帮助,将更新这篇文章的更多详细信息。

你在尝试这个时遇到具体问题吗?假设代码是跨平台的并且可以在iOS上运行,您只需创建一个新的makefile(Android是专门的)或将文件拖到新的或现有的XCode项目中。

Apple的Clang可以编译(你当然可以混合)C,C++和Obj-C。例如,如果您需要混合 Obj-C 并C++将您的文件命名为 .mm 然后开始。

示例 Makefile(注意:草率,但应该说明!http://pastebin.com/ZyrsfT87

你被困住了。 iOS和Android不共享相同的ABI。 即使你可以做链接器魔术从 ELF 共享库中提取符号并将它们链接到 Mach 二进制文件,函数也会崩溃,因为参数传递和堆栈帧设置等内容不同(老实说,我不知道细节,除了 iOS 不是 EABI)。 如果您愿意为每个函数编写或生成程序集级抛锚层,这几乎是不可能的。 但基本上:你是SOL。

最新更新