错误特征
fatal error: 'jni.h' file not found
原因
c/c++源代码中引用了jni.h,而jni.h需要由jdk提供,但实际未配置jdk路径
解决
关于依赖头文件所在目录
CMakeLists.txt 添加jni.h 以及该头文件内部依赖头文件的全部目录,共涉及2个目录。
JAVA_HOME/include
JAVA_HOME/include/darwin
其中,
- JAVA_HOME是JDK根目录
- darvin是mac平台下的定制实现目录,如果非mac平台可以看下实际目录并根据实际情况修改,例如x86_64。
cmake如何配置
cmake依赖CMakeLists.txt 配置编译内容,增加头文件目录涉及的“方法”是target_include_directories(库名称 可见性 目录)
例如为共享库align增加jni.h系列依赖:
add_library(align SHARED c1.cpp c2.cpp c3.cpp)
target_include_directories(align PRIVATE $ENV{JAVA_HOME}/include/)
target_include_directories(align PRIVATE $ENV{JAVA_HOME}/include/darwin)
示例中并未依赖JAVA_HOME的具体目录,而是通过环境变量代替。对于cmake的配置文件CMakeLists.txt,可以通过$ENV{环境变量名}取得实际的环境变量值。