0

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関数の戻り値が原因だと思いますが、よくわかりませんが、誰か親切に確認してください。前もって感謝します。

4

1 に答える 1

1

freerdp_ext_connectコンパイルされたライブラリにあるのですか?その場合、NDK プロジェクトをビルドするときにそのライブラリにリンクしていますか? ライブラリとリンクするには、次を Android.mk に配置します。

LOCAL_LDLIBS := -lfoo

また、リンカは libfoo.a または libfoo.so のいずれか利用可能な方に対してリンクします。

がソース ファイルにある場合freerdp_ext_connect- そのソース ファイルをコンパイルしていますか? ソース ファイルはLOCAL_SRC_FILES、Android.mk の下にリストされている必要があります。

于 2012-07-25T15:47:54.507 に答える