C++ Android NDK cmake和相关库

C++ Android NDK cmake和相关库,c++,boost,android-ndk,cmake,java-native-interface,C++,Boost,Android Ndk,Cmake,Java Native Interface,我想在我的JNI代码中使用一个库(来自GH的源代码)。但是这个库依赖于另外两个在androidndk中不可用的库(NTL和Boost)。 现在我有点困惑,不确定我是否正确理解我的以下行为 Android的C++代码内置于每个平台(x86_64,armv7..)的共享库(.so)中。这是否意味着我要使用的NTL、Boost和lib也必须由我从这些平台的源代码中编译?如果是,如何使用cmake正确执行 如果我应该为特定平台构建所有lib,那么如何更好地作为静态lib(.a+头)或共享lib 我真的需

我想在我的JNI代码中使用一个库(来自GH的源代码)。但是这个库依赖于另外两个在androidndk中不可用的库(NTL和Boost)。 现在我有点困惑,不确定我是否正确理解我的以下行为

  • Android的C++代码内置于每个平台(x86_64,armv7..)的共享库(.so)中。这是否意味着我要使用的NTL、Boost和lib也必须由我从这些平台的源代码中编译?如果是,如何使用cmake正确执行

  • 如果我应该为特定平台构建所有lib,那么如何更好地作为静态lib(.a+头)或共享lib

  • 我真的需要为所有平台构建NTL和Boost吗?还是应该只为所需的库构建NTL和Boost

  • Android.mk文件是必需的还是可以帮助cmake?据我所知,它仅与“ndk build”一起使用

  • 一般来说,这一系列的行动是否正确

  • 为所有平台生成NTL(.a+标头)
  • 为所有平台生成Boost(.a+头)
  • 为所有平台生成库(.so)
  • 在CMakeLists for JNI项目中将库的.so文件作为依赖项添加。(我是否仍然需要依赖的lib和header,或者依赖项将被纳入lib中?)
  • Android的C++代码内置于每个平台(x86_64,armv7..)的共享库(.so)中。这是否意味着我要使用的NTL、Boost和lib也必须由我从这些平台的源代码中编译?如果是,如何使用cmake正确执行

    是的,如果您想在应用程序中使用这些库,您需要从源代码构建这些库(或者找到Android的二进制发行版)。至于如何做到这一点,你将不得不等待其他人回答或尝试谷歌搜索。有一些“如何为Android构建X”教程,但我不知道你是否会找到很多关于CMake的教程,因为CMake对于Android来说是非常新的

    如果我应该为特定平台构建所有lib,那么如何更好地作为静态lib(.a+头)或共享lib

    这主要取决于您为应用程序构建的共享库的数量。应用程序的理想模式是在应用程序中使用单个共享库,并在所有依赖项中静态链接(这将避免旧版本Android上的链接器错误,并使应用程序尽可能小)。如果您的代码有多个共享库,则需要对依赖项使用共享库,以避免ODR问题

    我真的需要为所有平台构建NTL和Boost吗?还是应该只为所需的库构建NTL和Boost

    您需要在任何需要使用这些库的平台上执行此操作

    Android.mk文件是必需的还是可以帮助cmake?据我所知,它仅与“ndk build”一起使用

    CMake和ndk build应该都能工作,但由于CMake在Android中相对年轻,您可能更容易找到ndk build的移植说明