0

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

4

2 回答 2

0

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

于 2012-05-10T15:58:34.607 回答
0

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

Apple 的 Clang 可以编译(当然你也可以混合使用)C、C++ 和 Obj-C。例如,如果您需要混合 Obj-C 和 C++ 命名您的文件 .mm 并继续。

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

于 2012-05-14T02:44:17.803 回答