0
我正在测试Android应用程序中的集成静态库。 不幸的是编译不起作用!你能帮我吗?使用静态库的Android NDK - >函数尚未声明
我总是得到错误:
jni/main-jni.cpp: In function 'jint Java_com_tmz_cc_MainActivity_test1(JNIEnv*, jobject)': jni/main-jni.cpp:10:23: error: 'FileSync' has not been declared
make: *** [obj/local/armeabi/objs/ccSharedLib/main-jni.o] Error 1
我想通过链接将是 “FileSync” 之称。
考虑以下几点:
project
+- ..
+-jni
+- include
+- prebuild
+- libFileSync.a
+- Android.mk
+- main-jni.cpp
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fileSyncStaticLibrary
LOCAL_SRC_FILES := prebuild/libFileSync.a
LOCAL_EXPORT_C_INCLUDES := include/
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ccSharedLib
LOCAL_SRC_FILES := main-jni.cpp
LOCAL_STATIC_LIBRARIES := fileSyncStaticLibrary
include $(BUILD_SHARED_LIBRARY)
主jni.cpp
#include <jni.h>
#include <stdio.h>
extern "C" {
jint Java_com_tmz_cc_MainActivity_test1(JNIEnv* env, jobject thiz) {
//FileSync *file = new FileSync("connection");
jstring seperator = FileSync::getPathSeperator();
jint temp = 0;
return temp;
}
jint Java_com_tmz_cc_MainActivity_test2(JNIEnv* env, jobject thiz) {
jint temp = 0;
return temp;
}
}
错误:
"Compile++ thumb : ccSharedLib <= main-jni.cpp
Reaping winning child 0x012d6098 PID 19632680
Cleaning up temp batch file C:\Users\jpenning\AppData\Local\Temp\make4148-1.bat
CreateProcess(C:\android\ndk\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-g++.exe,C:/android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/ccSharedLib/main-jni.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Iinclude/ -IC:/android/ndk/sources/cxx-stl/system/include -Ijni -DANDROID -Wa,--noexecstack -IC:/android/ndk/platforms/android-14/arch-arm/usr/include -c jni/main-jni.cpp -o ./obj/local/armeabi/objs/ccSharedLib/main-jni.o,...)
Live child 0x12d6098 (obj/local/armeabi/objs/ccSharedLib/main-jni.o) PID 19632680
jni/main-jni.cpp: In function 'jint Java_com_tmz_cc_MainActivity_test1(JNIEnv*, jobject)':
jni/main-jni.cpp:10:23: error: 'FileSync' has not been declared
make: *** [obj/local/armeabi/objs/ccSharedLib/main-jni.o] Error 1
Reaping losing child 0x12d6098 PID 19632680
Removing child 0x12d6098 PID 19632680 from chain.
Soory不起作用。我只有静态库。我不能包含.h文件。 'jni/main-jni.cpp:3:22:致命错误:FileSync.h:没有这样的文件或目录 编译终止。' – iAn
您必须**为您正在尝试执行的操作提供头文件(例如,在第三方库顶部编写JNI包装器)。看到这个更多的细节:http://stackoverflow.com/questions/13899481/when-is-a-header-file-required-for-using-a-static-library – deltheil