2011-03-11 98 views
1

我是使用Android NDK的初學者。有關Android NDK的幫助

我使用Eclipse和我安裝了Cygwin打造的C文件生成.so文件

但在構建C文件在Cygwin中,我總是得到錯誤

make: ***No rule to make target 'file.c' ... .Stop

我試着建立不同的C代碼,但每個文件它說了同樣的錯誤..

這裏是源代碼:

public class ndktest extends Activity 
{ 
static { 
    System.loadLibrary("ndkt"); 
    } 
private native void helloLog(String logThis); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    helloLog("this is to test log file"); 
} } 

file.c

void Java_com_ndktest_helloLog(JNIEnv * env, jobject this, jstring logThis)
{
jboolean isCopy;
const char * szLogThis = (*env)->GetStringUTFChars(env, logThis, &isCopy);
(*env)->ReleaseStringUTFChars(env, logThis, szLogThis);
}

這裏是我的Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndkt 
LOCAL_SRC_FILES := file.c 
include $(BUILD_SHARED_LIBRARY) 

我搜索了錯誤的原因,解決方案......但沒有爲我工作。

任何人都可以告訴我我犯了什麼錯誤嗎?

感謝,

溼婆庫馬爾

+0

你有一個名爲'file.c'在你的Android.mk是在目錄中的文件? – Dre 2011-03-11 07:30:15

+0

yes .. file.c與Android.mk位於同一文件夾中 – 2011-03-11 07:56:15

+0

我可以在cygwin中解決「無法生成文件的規則」的錯誤...但是當我執行java代碼時它會給出UnsatisfiedLinkError並顯示在helloLog()函數調用時發生錯誤... – 2011-03-11 11:35:12

回答

0

最有可能的錯誤就在於任何以下兩個方面:

  1. 在您所使用的函數名。查看您的軟件包名稱是否與您在C代碼中使用的函數名稱相匹配。 Java_com_ndktest_helloLog

  2. 驗證Android.mk文件是否設置了正確的目錄以在jni目錄中查找C源文件。

這是一個很棒的網站,用於設置您的第一個ndk程序。 很容易跟蹤和還包含截圖: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/

0

爲了您java.lang.UnsatisfiedLinkError中,你需要找出完整的信息是什麼。

你會看到在

Runtime.loadLibrary(String, ClassLoader) line: 434 

異常如果單步運行,你會得到

ExceptionInInitializerError.<init>(Throwable) line: 59 

現在你可以看到異常的內容,它會看起來像這樣:

java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1311]: 1281 cannot locate 'somethingInterestingWouldBeHere'...

而這應該有助於找出什麼是錯的。

請記住,您必須手動確定庫的加載順序;如果庫A依賴於庫B,則需要加載B,然後A.這不會自動發生。