将您自己的库添加到 Android NDK

Add Eigen Library to Android NDK

我需要在我的 Android Studio 项目中包含 Eigen 库来执行一些线性代数运算并使用我为桌面开发的一些 C++ 代码。我一直在寻找有关此主题的信息,但信息不多,而且我是 Android NDK 的新手。 Eigen 库不需要编译,所以我认为这很容易,但我遗漏了一些东西。我试图将 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?

我终于达到了 objective,我正在 Android 中使用 Eigen。如果您正在尝试在 Android 中使用 Eigen 库,希望对您有所帮助:

  1. 从官方网站下载 Eigen 库。
  2. 复制你下载的压缩包里面的Eigen文件夹,里面有所有的 headers(.h 文件)的库并将其粘贴到您选择的一个文件夹中 在项目中。例如,我是这样做的:

    ../app/src/main/cpp

  3. 编辑CMakeLists.txt,将这一行添加到 Eigen 文件夹的路径 在你的项目中: include_directories(src/main/cpp/Eigen)
  4. 在真实设备(不在模拟器上运行)中启动应用程序以加载 Eigen header 个文件。
  5. 在您的 cpp 文件中包含 Eigen headers 并正常使用它们。例如:

    #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; }

在我的例子中,我不需要编译任何东西,只需要使用官方 Eigen 库的 header 文件

  1. Clone Eigen git repo 从 https://github.com/eigenteam/eigen-git-mirror 例如到 ThirdParty/eigen

  2. 只需将 Eigen 添加到构建过程中,例如到你的根 CMakeLists.txt

    add_subdirectory(ThirdParty/eigen)

  3. 并使用它:

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

    target_link_libraries(${PROJECT_NAME} Eigen3::Eigen)

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

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

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