将您自己的库添加到 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 库,希望对您有所帮助:
- 从官方网站下载 Eigen 库。
- 复制你下载的压缩包里面的Eigen文件夹,里面有所有的
headers(.h 文件)的库并将其粘贴到您选择的一个文件夹中
在项目中。例如,我是这样做的:
../app/src/main/cpp
- 编辑CMakeLists.txt,将这一行添加到 Eigen 文件夹的路径
在你的项目中:
include_directories(src/main/cpp/Eigen)
- 在真实设备(不在模拟器上运行)中启动应用程序以加载 Eigen
header 个文件。
在您的 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 文件
Clone Eigen git repo 从 https://github.com/eigenteam/eigen-git-mirror 例如到 ThirdParty/eigen
只需将 Eigen 添加到构建过程中,例如到你的根 CMakeLists.txt
add_subdirectory(ThirdParty/eigen)
并使用它:
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
我需要在我的 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 库,希望对您有所帮助:
- 从官方网站下载 Eigen 库。
- 复制你下载的压缩包里面的Eigen文件夹,里面有所有的
headers(.h 文件)的库并将其粘贴到您选择的一个文件夹中
在项目中。例如,我是这样做的:
../app/src/main/cpp
- 编辑CMakeLists.txt,将这一行添加到 Eigen 文件夹的路径
在你的项目中:
include_directories(src/main/cpp/Eigen)
- 在真实设备(不在模拟器上运行)中启动应用程序以加载 Eigen header 个文件。
在您的 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 文件
Clone Eigen git repo 从 https://github.com/eigenteam/eigen-git-mirror 例如到 ThirdParty/eigen
只需将 Eigen 添加到构建过程中,例如到你的根 CMakeLists.txt
add_subdirectory(ThirdParty/eigen)
并使用它:
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