2012-07-25 51 views
0

我想從使用NDK和JNI的本機C代碼調用一個簡單的連接函數。以下是我的代碼:從本機代碼的NDK調用函數

C代碼 - 返回一個值

freerdp_ext_connect(const char *host, const char *username, 
        const char *pass, const char *domain, 
        int width, int height){} 

Java代碼:

#include <jni.h> 
#include <stdio.h> 
#include <freerdp/freerdp.h> 

jstring Java_com_example_freerdpandroid_FreeRDPActivity_test(JNIEnv* env, jobject javaThis) 
{ 

freerdp_ext_connect("10.123.123.12", "admin", "dsadsad", "", 600, 800); 

    return (*env)->NewStringUTF(env, "dsfsdf"); 

} 

當嘗試使用Cygwin它給我這個錯誤編譯:

./obj/local/armeabi/objs/freerdp/freerdp.o: In function `Java_com_example_freerdpandroid_FreeRDPActivity_test': 
C:\Users\stefan.scerri\workspace\freerdp/jni/freerdp.c:11: undefined reference to `freerdp_ext_connect' 
collect2: ld returned 1 exit status 
/cygdrive/c/android-ndk/android-ndk/build/core/build-binary.mk:378: recipe for target `obj/local/armeabi/libfreerdp.so' failed 
make: *** [obj/local/armeabi/libfreerdp.so] Error 1 

任何想法,爲什麼這樣?我相信這是因爲C函數的返回值,但是我不確定,有人可以證實。提前致謝。

+0

這是因爲您從本機函數調用的本機函數包含在您呈現給鏈接器的對象和庫中。 – 2012-07-25 11:40:06

+0

對不起,我的意思是說_not_不包含 – 2012-07-25 16:38:41

回答

1

freerdp_ext_connect是否在編譯過的庫中?如果是這樣,當您構建NDK項目時,您是否鏈接到該庫?要以庫鏈接,請將以下爲Android.mk:

LOCAL_LDLIBS := -lfoo 

和鏈接都會連接libfoo.a或者libfoo.so,取其可用。

如果freerdp_ext_connect在源文件中 - 您是在編譯該源文件嗎?源文件必須在Android.mk的LOCAL_SRC_FILES下列出。