2014-12-04 3 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. 

PLS 나를 도울를

내 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; 
     } 

} 

내 자바 코드 :

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"프로젝트 폴더에있는 안드로이드 응용 프로그램 라이브러리는/data/data/[package_name]/lib 폴더에 기록됩니다. 런타임 중에 필요한 경우이 위치에서로드됩니다. http://developer.android.com/training/articles/perf-jni.html#faq_ULE – Gattsu

+0

예 .so 파일이 libs 폴더에 있는지 확인하십시오. 하지만 그 안드로이드 응용 프로그램/데이터/데이터/[packge_name]/lib 폴더에 있지 않습니다. 나는 그것을 opencv manager.thanks에서 사전에 걸릴 것 같아요 – Mirza

답변

0

기본적으로 "네이티브 그레이"는 그렇지 않았습니다. 로드 할 때 코드 camera()을 호출 할 때

mLoaderCallback은 onResume() 다음

하고, 당신의 C에서 호출되는있는 완료 후에는, 단지로드되었다 (도하고 자신의)를 OpenCV의 그래서 이후에서 onCreate()에있는 OpenCV의 코드를 호출 할 수 없습니다

++ 코드 결코 작품입니다.

android (E_NOKEYBOARD)에서 imshow() 또는 waitKey()를 호출 할 수 없습니다. while 루프는 유효하지 않습니다. 활동이 지연 될 수 있습니다.

+0

나는 당신이 바로 C++ 코드를 수정하기 위해 제공 할 것입니다 어떤 링크를 @berak 생각합니다. mLoaderCallback을 호출하면 카메라 네이티브 메소드가 동일한 오류를 표시하기 전에 호출합니다. – Mirza

+0

카메라() 코드를 onCameraViewStarted() 또는 그와 비슷한 위치로 이동해야합니다. – berak

관련 문제