cmake报错:Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2)解决方案

在Linux下使用cmake编译包含<jni.h>的c++动态链接库时遇到Could NOT find JNI错误。经过分析,发现JAVA_INCLUDE_PATH对应jni.h,JAVA_INCLUDE_PATH2对应jni_md.h。通过在CmakeLists.txt中手动设置这两个路径,问题得以解决。如果需要,可以查找系统中jdk的实际安装路径进行替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
-- Try 1 failed CMake Warning at cmake/OpenCVDownload.cmake:248 (message): IPPICV: Download failed: 28;"Timeout was reached" For details please refer to the download log file: /home/charon/Opencv/opencv-4.8.0/build/CMakeDownloadLog.txt Call Stack (most recent call first): 3rdparty/ippicv/ippicv.cmake:37 (ocv_download) cmake/OpenCVFindIPP.cmake:259 (download_ippicv) cmake/OpenCVFindLibsPerf.cmake:12 (include) CMakeLists.txt:756 (include) -- Could NOT find CUDNN: Found unsuitable version "..", but required is at least "7.5" (found /usr/lib/x86_64-linux-gnu/libcudnn.so.8.9.0) -- CUDA detected: 12.5 -- CUDA: Using CUDA_ARCH_BIN=8.9 -- CUDA NVCC target flags: -gencode;arch=compute_89,code=sm_89;-D_FORCE_INLINES -- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off -- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off -- Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR) -- Could NOT find Java (missing: Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE Java_JAVADOC_EXECUTABLE) (found version "11.0.26") -- Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) -- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file CMake Error at cmake/OpenCVModule.cmake:274 (message): No modules has been found: /home/ub/opencv-4.8.0/opencv_contrib_4.8.0/modules Call Stack (most recent call first): cmake/OpenCVModule.cmake:356 (_glob_locations) cmake/OpenCVModule.cmake:408 (ocv_glob_modules) CMakeLists.txt:967 (ocv_register_modules) -- Checking for module 'gtk+-2.0' -- No package 'gtk+-2.0' found -- Checking for module 'libavresample' -- No package 'libavresample' found CMake Error at modules/core/CMakeLists.txt:54 (message): CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib' repository: https://github.com/opencv/opencv_contrib -- Configuring incomplete, errors occurred! See also "/home/charon/Opencv/opencv-4.8
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值