2011-09-07 81 views
0

我正在使用Eclipse來實驗Android NDK編程。我的平臺信息如下:Android ndk-build不會在/ lib中生成共享庫

  1. Windows 7的
  2. Eclipse平臺。我可以使用這個eclipse平臺來構建android應用程序而不用麻煩;沒有問題。
  3. Cygwin安裝了開發包。 「make」的版本是GNU Make 3.81。

我編寫非常簡單本地C功能以及所示Android.mk如下:

----------- ../JNI/get_string_native.c --- ------

#include <jni.h> 
#include <string.h> 
#include <android/log.h> 
#include <stdio.h> 

jstring Java_geil_learn_ndk_NDKStringActivity_getString(JNIEnv * env, jobject this, jint value1, jint value2) 
{ 
    char *szFormat = "The sum of the two numbers is: %i"; 
    char *szResult; 

    // add the two values 
    jlong sum = value1+value2; 

    // malloc room for the resulting string 
    szResult = malloc(sizeof(szFormat) + 20); 

    // standard sprintf 
    sprintf(szResult, szFormat, sum); 

    // get an object string 
    jstring result = (*env)->NewStringUTF(env, szResult); 

    // cleanup 
    free(szResult); 

    return result; 
} 

--------------/JNI/Android.make ----------

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

現在我試着t o使用ndk-build生成共享庫,但沒有任何結果。即使沒有錯誤信息出現。請看下圖:

-------從Cygwin的終端---------

[email protected] /cygdrive/d/eclipse_projects/workspace/NDKString/jni 
$ ndk-build 

[email protected] /cygdrive/d/eclipse_projects/workspace/NDKString/jni 
$ 

當然,我已經設置了環境變量PATH和\ JNI構建它。

我現在很困惑;請幫幫我!!


我已經刪除Android.make文件中的#號。現在它可以在/ lib中生成相應的.so文件。但是當我在一個活動中調用本地方法時,發生運行時錯誤。 Logcat信息如下。你能幫我嗎?

Trying to load lib /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0 
Added shared lib /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0 
No JNI_OnLoad found in /data/data/geil.learn.ndk.NDKStringAcivity/lib/libnative.so 0x405151f0, skipping init 
60): Displayed geil.learn.ndk.NDKStringAcivity/.NDKStringActivity: +1s145ms 
No implementation found for native Lgeil/learn/ndk/NDKStringAcivity/NDKStringActivity;.getString (II)Ljava/lang/String; 
344): Shutting down VM threadid=1: thread exiting with uncaught exception (group=0x40015560) 
344): FATAL EXCEPTION: main 
344): java.lang.UnsatisfiedLinkError: getString 
344):  at geil.learn.ndk.NDKStringAcivity.NDKStringActivity.getString(Native Method) 
344):  at geil.learn.ndk.NDKStringAcivity.NDKStringActivity.onClick(NDKStringActivity.java:40) 
344):  at android.view.View.performClick(View.java:2485) 
344):  at android.view.View$PerformClick.run(View.java:9080) 
344):  at android.os.Handler.handleCallback(Handler.java:587) 
344):  at android.os.Handler.dispatchMessage(Handler.java:92) 
344):  at android.os.Looper.loop(Looper.java:123) 
344):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
344):  at java.lang.reflect.Method.invokeNative(Native Method) 
344):  at java.lang.reflect.Method.invoke(Method.java:507) 
344):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
344):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
344):  at dalvik.system.NativeStart.main(Native Method) 
60): Force finishing activity geil.learn.ndk.NDKStringAcivity/.NDKStringActivity 
60): Activity pause timeout for HistoryRecord{407868c8) geil.learn.ndk.NDKStringAcivity/.NDKStringActivity} Sending signal. PID: 344 SIG: 9 
60): Process geil.learn.ndk.NDKStringAcivity (pid 344) has died. 
60): WIN DEATH: Window{4073a7c0 geil.learn.ndk.NDKStringAcivity/geil.learn.ndk.NDKStringAcivity.NDKStringActivity paused=false} 
(60): Got RemoteException sending setActive(false) notification to pid 344 uid 10037 
60): Activity destroy timeout for HistoryRecord{407868c8 geil.learn.ndk.NDKStringAcivity/.NDKStringActivity} 
+3

嘗試重命名Android.make到的Android.mk – Salw

回答

1

正如Salw已經指出,您將需要更改擴展名。

在.mk文件中的#是一個註釋,你基本上你的make文件是一個空的makefile。從.mk文件中刪除#。你

還需要給它包含頭文件包含目錄..

+0

韓國社交協會爲您提示。我已經刪除了Android.make文件中的#號。現在它可以在/ lib中生成相應的.so文件。但是當我在一個活動中調用本地方法時,發生運行時錯誤。 Logcat信息如下: – alwayssmile68

+0

請把它作爲一個單獨的問題在stackoverflow上。 – bluefalcon