Android NDK编译Eigen头文件库:Android.mk必要性及CMake配置咨询
解答:Android NDK引入Eigen纯头文件库的疑问
嘿,刚上手NDK踩这些坑太正常了,我来帮你把这两个问题理清楚:
1. 是否需要Android.mk文件?
完全不需要!Android.mk是旧版NDK构建系统(基于Makefile)的配置文件,现在Android Studio已经把CMake作为默认的原生构建工具,新项目默认都不会生成Android.mk文件。只要你的项目是用CMake来管理原生代码的,所有配置都可以在CMakeLists.txt里完成,完全不用碰Android.mk。那些提到Android.mk的资料大概率是比较老旧的内容,不用纠结这个。
2. 你的CMakeLists.txt配置走偏了——Eigen是纯头文件库!
Eigen整个库都是头文件(.h/.hpp),根本不需要编译成静态库(.a文件),你现在的配置把它当成需要编译的带源码的第三方库来处理,完全是多此一举,甚至会导致构建出错。
正确的配置超级简单:
只需要在你的CMakeLists.txt里添加一行,告诉编译器Eigen头文件的位置就行:
# 假设Eigen文件夹在../app/Eigen路径下,用CMAKE_CURRENT_SOURCE_DIR更可靠 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../Eigen)
CMAKE_CURRENT_SOURCE_DIR是CMake的内置变量,指向当前CMakeLists.txt所在的目录,用它来拼接路径比硬编码更稳妥,避免路径出错。
你之前写的这些代码全部可以删掉:
set( Eigen_src_DIR ../Eigen ) set( lib_build_DIR ../Eigen/output) file(MAKE_DIRECTORY ${lib_build_DIR}) add_subdirectory( ${lib_src_DIR} ${lib_build_DIR}) add_library( lib_eigen STATIC IMPORTED ) set_target_properties( lib_eigen PROPERTIES IMPORTED_LOCATION ${lib_build_DIR}/${ANDROID_ABI}/lib_eigen.a ) include_directories( ${lib_src_DIR}/Eigen )
这些是用来引入需要编译的第三方库(比如包含.cpp源码的库)的流程,但Eigen是模板化的纯头文件库,所有逻辑都在头文件里,编译时会直接被你的原生代码include并编译,完全不需要提前编译成静态库。
内容的提问来源于stack exchange,提问作者edusan1213
相关产品推荐
相关产品推荐

