现在我得到的错误:Unsatisfiedlinkerror本地方法
unsatisfiedLinkerror native method not found.2-04 07:16:34.002: E/AndroidRuntime(1962): java.lang.UnsatisfiedLinkError: Native method not found: com.example.hellocplusplus.MainActivity.camera:()I.
请帮我
我的C++代码:
#include <opencv/cv.h>
#include <jni.h>
#include <opencv/highgui.h>
using namespace cv;
/************************************************************************************************************
**
***********************************************************************************************************/
extern "C"{
JNIEXPORT jint JNICALL Java_com_example_hellocplusplus_MainActivity_camera
(JNIEnv *, jobject);
JNIEXPORT jint JNICALL Java_com_example_hellocplusplus_MainActivity_camera
(JNIEnv *, jobject)
{
VideoCapture cap(0); // open the video camera no. 0
if (!cap.isOpened()) // if not success, exit program
{
//cout << "Cannot open the video cam" << endl;
return -1;
}
namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); //create a windowcalled "MyVideo"
//Show continous video on the output window
while (1)
{
Mat frame;
bool bSuccess = cap.read(frame); // read a new frame from video
if (!bSuccess) //if not success, break loop
{
//cout << "Cannot read a frame from video stream" << endl;
break;
}
imshow("MyVideo", frame); //show the frame in "MyVideo" window
if (waitKey(30) == 27) //wait for 'esc' key press for 30ms. If 'esc' key is pressed, break loop
{
//cout << "esc key is pressed by user" << endl;
break;
}
}
return (jint) 0;
}
}
我的Java代码:
package com.example.hellocplusplus;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
public static String TAG="OpenCVImageProcessing";
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
System.loadLibrary("nativegray");
Log.i(TAG, "OpenCV loaded successfully");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
public native int camera();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
camera();
//i=camera();
//System.out.println(i);
// camera1();
}
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
.so文件在'libs'文件夹中吗?将“libs”项目文件夹中的Android应用程序库写入/ data/data/[package_name]/lib文件夹。在运行期间,如果需要,它们将从此位置加载。检查http://developer.android.com/training/articles/perf-jni.html#faq_ULE – Gattsu 2014-12-04 12:49:03
yes .so文件位于libs文件夹中。但它不在Android应用程序/ data/data/[packge_name]/lib文件夹中。我认为它会从opencv管理器中提取。预先感谢 – Mirza 2014-12-05 05:38:36