2012-04-22 32 views
0
  1. 我有一個C++方法我試圖從Java代碼中調用
  2. 方法的簽名是:Android的JNI UnsatisfiedLink異常

    • 的Java
      公共類FLVCamActivity擴展活動{
      靜態{
      System.loadLibrary(「FLVCam」);
      System.out.println(「Loaded FLVCam」);
      }
      public native void RunFlvServer(int iCamId);

    • C++
      外部的 「C」 JNIEXPORT空隙JNICALL Java_com_sophin_flvcam_FlvCamActivity_RunFlvServer(JNIEnv的*的env,jobject javaThis,jint iCamId)

  3. 在運行時期間,的System.loadLibrary( 「FLVCam」)成功,但是,調用'RunFlvServer'失敗,因爲沒有找到原生Lcom/sophin/flvcam/FLVCamActivity的實現; .RunFlvServer(I)V「
  4. 我使用的SDK版本是:AndroidSDK = 15,NDK = r7b,minsdk @清單= 15
  5. 使用'nm -g'列出我的本機lib公開的所有導出條目,清楚地表明本機方法已正確導出: 0006c0a8 T Java_com_sophin_flvcam_FlvCamActivity_RunFlvServer

    考慮到上述情況,爲什麼我會得到這個UnsatisfiedLink異常?

Nadav在Sophin

+0

Java本機函數聲明是怎樣的?它應該在com.sophin.flvcam包中,像這樣在FlvCamActivity類中:「native void RunFlvServer(int iCamId)」。 – 2012-04-22 19:38:27

+0

使用javah命令可以很好地使用功能標題。 – 2012-04-23 03:35:33

回答

0

這是一個大寫/小寫類的事情,FLVCamActivity具有「FLV」在上部而C++方法具有「FLV的」(下),我浪費幾乎那一天,Maan,我希望下次我會把時間用在真正的錯誤上。