2010-10-25 38 views
12

Tôi cố gắng để biên dịch sau cho ndk androidAndroid C++ NDK

#include <jni.h> 
#include <string.h> 

extern "C" { 
    JNIEXPORT jstring JNICALL Java_com_knucklegames_helloCpp_testFunction(JNIEnv * env, jobject obj); 
}; 

JNIEXPORT jstring JNICALL Java_com_knucklegames_helloCpp_testFunction(JNIEnv *env, jobject obj) { 
return env->NewStringUTF(env, "Hello from native code!"); 
} 

nhưng nó là đưa ra các lỗi sau

Compile++ thumb: helloCpp <= /cygdrive/c/workspace/helloCpp/jni/main.cpp 
/cygdrive/c/workspace/helloCpp/jni/main.cpp: In function '_jstring* Java_com_knucklegames_hello 
Cpp_testFunction(JNIEnv*, _jobject*)': 
/cygdrive/c/workspace/helloCpp/jni/main.cpp:10: error: no matching function for call to '_JNIEn 
v::NewStringUTF(JNIEnv*&, const char [24])' 
/cygdrive/d/android/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/include/jni.h:839: note: candidates 
are: _jstring* _JNIEnv::NewStringUTF(const char*) 
make: *** [/cygdrive/c/workspace/helloCpp/obj/local/armeabi/objs/helloCpp/main.o] Error 1 

Trả lời

19

Chức năng NewStringUTF chỉ mất một đối số, một c-string :

env->NewStringUTF("Hello from native code!"); 

có một phiên bản C mà đi như thế này:

NewStringUTF(env, "Hello from native code!"); 

Nhưng rõ ràng bạn đang sử dụng phiên bản C++.

+0

Cảm ơn điều này đã giải quyết được lỗi, nhưng bây giờ nó buộc phải đóng khi cố gắng tải thư viện. Nó nằm trong thư mục lib dưới tên libhelloCpp.so và tĩnh {System.loadLibrary ("helloCpp"); } là vấn đề – Will03uk

+0

Nếu bạn có câu hỏi khác, bạn nên tạo một bài đăng khác. Nhiều người có thể thấy nó theo cách đó. –

+0

Hãy chắc chắn rằng .so là dưới libs/armeabi; khi APK được cài đặt vào thiết bị, bạn sẽ thấy APK đó trong /data/data/com.knucklegames.helloCpp/lib/libhelloCpp.so – I82Much