PS:这种解决方法我可能是全网首发
最近我在Linux下用cmake编译一个c++带#include<jni.h>的动态链接库时报错,显示Could NOT find JNI:
[root@192 build]# cmake .
CMake Error at /usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2)//这里是重点
Call Stack (most recent call first):
/usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.23/Modules/FindJNI.cmake:382 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:20 (find_package)
网上类似的问题很少,而且基本都是java安装不当或者文件缺失导致的,重装就好了。但我把jdk、cmake、g++、gcc全都重装了一遍,依旧提示找不到JAVA_INCLUDE_PATH和 JAVA_INCLUDE_PATH2这两个路径。
然后我只能自己去分析,经过查阅资料,我发现JAVA_INCLUDE_PATH对应的是jni.h所在路径,JAVA_INCLUDE_PATH2对应的是jni_md.h所在路径。在CmakeLists.txt中手动定义了这两个路径后,问题解决,代码如下:
# JAVA_INCLUDE_PATH为jni.h所在路径,一般在jdk目录下的include中
set(JAVA_INCLUDE_PATH /usr/ja