将Eigen Library添加到Android NDK

时间:2018-01-18 09:22:42

标签: android c++ android-ndk eigen

我需要在我的Android Studio项目中包含Eigen库来执行一些线性代数操作,并使用我为桌面开发的一些C ++代码。我一直在寻找有关这个主题的信息,但没有太多,我是Android NDK的新手。特征库不需要编译,所以我认为这很容易,但我遗漏了一些东西。我试图将Eigen文件夹(包含所有包含的文件)复制到NDK文件夹(.. \ Android \ Sdk \ ndk-bundle \ sysroot \ usr \ include)中,其中还有其他外部库(例如GLES)但是Android Studio无法检测到它。我该怎么做??提前谢谢,我真的需要这个。

编辑1: As you can see here, Eigen lib is included, but when I compile the project there are many errors, and I don't know why. Any ideas?

2 个答案:

答案 0 :(得分:4)

最后,我达到了我的目标,我正在使用Android中的Eigen。如果您想在Android中使用Eigen库,我希望这可以帮助您:

  1. 从官方网站下载Eigen图书馆。
  2. 复制您下载的zip中的Eigen文件夹 库的标题(.h文件)并将其粘贴到您选择的一个文件夹中 在项目中。例如,我做到了:
      
        

    ../应用程序/ SRC /主/ CPP

      
  3. 编辑CMakeLists.txt,将此行添加到Eigen文件夹的路径 在你的项目内: include_directories(src/main/cpp/Eigen)
  4. 在真实设备中启动应用程序(不在仿真器上工作)以加载Eigen 其中包含头文件。
  5. 在您的cpp文件中包含Eigen标头并正常使用它们。例如:

    #include "Eigen/Dense" void multiply2Matrices(){ Eigen::MatrixXd M(2,2); Eigen::MatrixXd V(2,2); for (int i = 0; i<=1; i++){ for (int j = 0; j<=1; j++){ M(i,j) = 1; V(i,j) = 2; } } Eigen::MatrixXd Result = M*V; }

  6. 在我的情况下,我没有编译任何东西,jus使用官方Eigen库的头文件

答案 1 :(得分:0)

  1. 将本征git repo从https://github.com/eigenteam/eigen-git-mirror克隆到ThirdParty / eigen

  2. 只需添加Eigen即可构建过程,例如到您的根CMakeLists.txt

    add_subdirectory(第三方/特征)

  3. 并使用它:

    add_library($ {PROJECT_NAME} SHARED src / test_eigen.cpp)

    target_link_libraries($ {PROJECT_NAME} Eigen3 :: Eigen)

因此,Android NDK的用法没什么特别的,只需将Eigen内容包括在本机构建中即可。 测试期间发生的一些问题使我不得不关闭一些Eigen东西,例如ThirdParty / eigen / CMakeLists.txt中的doc目标编译,因为它与我的项目中已经存在的目标相矛盾:

if(NOT ANDROID)
    add_subdirectory(doc EXCLUDE_FROM_ALL)
endif()

完整的用法示例可以在这里找到:https://github.com/nkh-lab/ndk-eigen-hello-world