【发布时间】:2019-09-06 02:51:24
【问题描述】:
我在 c++ 项目中添加 opencv 库并在 java 项目中添加 java 库 但是当将.so文件添加到java项目时
#include <iostream>
#include "jni.h"
#include "OpencvCpp.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <string.h>
using namespace cv;
using namespace std;
JNIEXPORT jfloat JNICALL Java_OpencvCpp_myFirsttest
(JNIEnv *, jobject){
//int main() {
Mat img, img2;
string filename = "/home/mohsen/Desktop/1.jpg";
img = imread(filename);
float m;
for (int i = 0; i < 96; ++i) {
for (int j = 0; j < 96; ++j) {
m = m + img.at<uchar>(i, j);
}
}
cout << m;
return m;
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
/* Header for class OpencvCpp */
#ifndef _Included_OpencvCpp
#define _Included_OpencvCpp
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: OpencvCpp
* Method: myFirsttest
* Signature: ()F
*/
JNIEXPORT jfloat JNICALL Java_OpencvCpp_myFirsttest
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
当我运行 c++ 项目时,返回一个好的结果 当获取 .so 文件并在 java 项目中使用时,显示此错误:
未定义符号:_ZN2cv6imreadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
【问题讨论】:
-
只是猜测,但根据操作系统,您可能需要将 .so 文件的位置添加到 PATH 或 LD_LIBRARY_PATH 环境变量中。您可能还需要在命令上添加 -Djava.library.path=... 以运行 java。
-
我的操作系统是 ubuntu 如何查看库的路径?我通过 intellij idea 将 java opencv 库添加到我的项目中!
-
我认为您可以编辑主目录中的 .profile 文件以放置 export LD_LIBRARY_PATH=/somedir 并注销并重新登录以在 intellij 外部或 intellij goto run 中更改它 -> 编辑配置并放置 - VM选项中的djava.library.path=/somdir或者点击环境变量东西添加LD_LIBRARY_PATH /somdir。
标签: java c++ opencv java-native-interface