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

时间:2012-05-10 15:36:02

标签: ios makefile android-ndk static-libraries porting

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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