2014-12-04 94 views
-1

现在我得到的错误: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; 
    } 

} 
+0

.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

+0

yes .so文件位于libs文件夹中。但它不在Android应用程序/ data/data/[packge_name]/lib文件夹中。我认为它会从opencv管理器中提取。预先感谢 – Mirza 2014-12-05 05:38:36

回答

0

基本上,你的“土着灰”并非如此加载,当你打电话给camera()的代码。

你不能调用的onCreate()任何OpenCV的代码,因为OpenCV的这样的(和你自己的,太)只拿到了装,一旦mLoaderCallback完成,这会从的onResume()

,然后,你的c叫++代码会有从来没有工作。

您无法在android(E_NOKEYBOARD), 和while(1)循环中调用namedWindow(),imshow()或waitKey(),因为它会阻止您的活动。

+0

我认为你是对的@berak你将提供的任何链接,以纠正C++代码。当我打电话给mLoaderCallback时,在摄像机本地方法调用之前创建它显示相同的错误 – Mirza 2014-12-05 05:20:43

+0

,您将不得不将摄像机()代码移动到onCameraViewStarted()或类似的位置。 – berak 2014-12-05 08:25:35

相关问题