这里是 MonoDroid 新手
我想在我的 Android 应用程序中使用静态 C++ 库,该应用程序是在 MonoDroid 下编写的(它是静态的,因为我想稍后将它移植到 MonoTouch)。我在 Windows 下使用 MonoDevelop,找不到解释我应该如何编译和链接这样一个库的教程。我现在正在尝试通过 SWIG 工具包使用 PInvoke 将其绑定(bind)到 MonoDroid,并且需要知道例如我应该为 c++ 库使用哪个编译器,我应该在哪里部署生成的 lib 文件以便 MonoDroid 可以使用它等。 谁能告诉我一些有用的东西?
最佳答案
由于多种原因,您将无法在 iOS 和 Android 之间使用相同的 .a
文件:
- Android 是 ELF,iOS 是 Mach-O
- Android 代码将需要编译为位置无关代码 (
-fPIC
),因为它最终会在.so
中,而 iOS 则没有要求(afaik)。 - 它们可能有不同的 ABI 调用约定等。
您需要为每个目标平台重新编译您的源代码。
鉴于您无论如何都需要重新编译,因此为 Android 创建一个 .a
文件意义不大;只需创建一个 .so
。请参阅 Android NDK 中的 docs/ANDROID-MK.html
.
您还可以查看 SanityTests示例,它使用 Android NDK ndk-build
命令生成共享库:
- SanityTests.csproj BuildNativeLibs target调用
ndk-build
。 ndk-build
调用 Android.mk生成例如libs\armeabi\libfoo.so
.- AndroidNativeLibrary构建操作将 native 库捆绑到生成的
.apk
中。
关于c++ - Windows下MonoDevelop中绑定(bind)c++静态库到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270257/