来自本机代码的NDK调用函数

时间:2012-07-25 10:46:52

标签: android c android-ndk

我试图使用NDK和JNI从本机C代码调用一个简单的连接函数。以下是我的代码:

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函数的返回值,但我不确定,有人可以确认。提前谢谢。

1 个答案:

答案 0 :(得分:1)

编译库中的freerdp_ext_connect是否有机会?如果是这样,在构建NDK项目时是否链接到该库?要与库链接,请将以下内容放入Android.mk:

LOCAL_LDLIBS := -lfoo

链接器将链接到libfoo.a或libfoo.so,无论哪个可用。

如果freerdp_ext_connect在源文件中 - 您是否正在编译该源文件?源文件必须列在Android.mk中的LOCAL_SRC_FILES下。