2012-12-19 70 views
1

我正在使用android NDK在我的應用程序中使用一個c + +庫。當我運行我的應用程序時,我總是收到一條錯誤消息,它是java.lang.UnsatisfiedLinkError: Native method not found.我檢查了我的代碼多次,但是我沒有找到任何東西。而且我得到了另一條錯誤消息是No rule to make target all.Android NDK:沒有規則使目標全部和本地方法沒有找到

LOCAL_C_INCLUDES += ${NDKROOT}/sources/cxx-stl/stlport/stlport 

LOCAL_PATH := $(call my-dir) 

LOCAL_ALLOW_UNDEFINED_SYMBOLS = true 
include $(CLEAR_VARS) 
LOCAL_MODULE := my-module-jni 
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*/*.cpp) 
include $(BUILD_SHARED_LIBRARY) 

extern "C" { 
JNIEXPORT jstring JNICALL 
Java_com_test_ndk_MyClassName_test 
(JNIEnv *env, jobject obj) 
{ 
    return env->NewStringUTF("Hello from C++ over JNI!"); 
} 
    } 
    public class MyClassName extends Activity{ 
    public static native String test(); 
    ...... 
    } 

在我的JNI文件夾中我有很多C++類和文件夾。我認爲問題是我的android.mk文件。 我應該在我的android.mk文件中更改什麼?

回答

0

既然你在你的代碼在一個更小的測試應用程序,但不是一個更大的應用程序確保較大的應用程序實際加載庫在Java活動,像這樣的評論提到:

// Load the .so 
static { 
    System.loadLibrary("libmy-jni-module"); 
} 
+0

當我嘗試的System.loadLibrary(「libmylib.so」),我收到錯誤消息「Libray找不到」。如果我嘗試System.loadLibrary(「mylib」),我收到錯誤信息「找不到本機方法」。我可以在我的項目目錄中看到libmylib.so文件。 – SavasCinar

+0

好的,我從內存中錯誤地解析了.so文件。您能否發佈本地方法的聲明,因爲它出現在您的Java源文件中,包括它所在類的名稱和包? –

+0

對不起,我不明白。我應該發佈什麼?我寫了方法聲明。 – SavasCinar

0

看起來方法的名稱不正確。你能告訴我們你從java調用的方法的名字和C/C++中的方法的名字嗎?

編輯:這可能包含更多信息:http://www.netmite.com/android/mydroid/2.0/development/ndk/docs/ANDROID-MK.TXT規範狀態LOCAL_PATH應該在第一行。同時尋找隱藏的空白處。

+0

即使問題不是函數名,我添加了它們。請關注android.mk – SavasCinar

+0

試試extern「C」。 – Trax

+0

我已經把extern「C」,但我忘了寫有問題 – SavasCinar

相關問題