x86-64 Ubuntu22.04虚拟机运行Jar时遇OpenCV UnsatisfiedLinkError
x86_64 Ubuntu 22.04 运行OpenPnP OpenCV项目报错的解决方法
排查方向与修复步骤
1. 检查/tmp目录挂载属性
Ubuntu虚拟机的/tmp可能被设置了noexec挂载属性,导致无法加载共享库:
- 执行命令查看挂载属性:
mount | grep /tmp - 如果输出包含
noexec,临时修改挂载权限:sudo mount -o remount,rw,exec /tmp - 永久修复:编辑
/etc/fstab文件,找到/tmp对应的挂载行,移除noexec参数,执行sudo mount -o remount /tmp生效
2. 重置Maven依赖缓存
本地Maven仓库中的OpenPnP OpenCV包可能存在损坏:
- 删除本地缓存目录:
rm -rf ~/.m2/repository/org/openpnp/opencv/4.7.0-0 - 重新构建项目,让Maven重新下载完整的依赖包
3. 补充系统级依赖库
OpenCV的Java绑定依赖系统底层的C++库,Ubuntu可能缺少相关组件:
- 安装OpenCV系统依赖:
sudo apt update && sudo apt install libopencv-dev libopencv-core4.5d libopencv-imgproc4.5d - 用
ldd命令检查缺失的依赖:ldd /tmp/opencv_openpnp12784852236417917500/nu/pattern/opencv/linux/x86_64/libopencv_java470.so
根据输出安装对应的缺失库
4. 调整临时目录配置
/tmp空间不足或权限问题可通过指定自定义临时目录解决:
- 检查/tmp剩余空间:
df -h /tmp - 启动Java程序时指定临时目录(替换为你有权限的目录):
java -Djava.io.tmpdir=/opt/my-tmp -jar your-app.jar
5. 替换加载方式
尝试绕过OpenCV.loadLocally(),手动加载库文件:
// 先加载本地编译或下载的libopencv_java470.so System.load("/opt/opencv/lib/libopencv_java470.so"); // 初始化OpenCV org.opencv.core.Core.init();
内容的提问来源于stack exchange,提问作者nickdos
相关产品推荐
相关产品推荐

