我需要在我的android項目中使用自定義預構建共享庫(構建於獨立ndk上,作爲libdynamic.so)。我在路徑src/main中創建了一個文件夾「jniLibs」,然後在「armeabi」「armeabi-v7a」「x86」「x86_64」中創建了4個文件夾。我已將預建的庫放入所有這4個文件夾中。在Android Studio中使用預構建的共享庫
現在來自我的本地代碼,我想調用這個庫的一個函數。以下列方式(在的CMakeLists.txt包括標題):
extern "C"
JNIEXPORT jstring JNICALL
Java_demo_co_ru_jnilibtest_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
float inv = rsqrt(3); //FUNCTION FROM LIBRARY (libdynamic.so)
std::string hello = "Hello ";
return env->NewStringUTF(hello.c_str());
}
我收到以下錯誤:
Error:error: cannot find -ldynamic
Error:(19) undefined reference to 'rsqrt(float)'
Error:error: linker command failed with exit code 1 (use -v to see invocation)
似乎共享庫沒有找到位置。我進入下列數值的CMakeLists.txt
include_directories(src/main/cpp/include) #include header of libdynamic.so
target_link_libraries(native-lib dynamic) #dependency of native-lib on libdynamic.so
我添加以下的gradle我裏面積聚其他條目(APP):
defaultConfig {
ndk{
abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64'
}
}
sourceSets {
main {
jni.srcDirs = ['src/main/jni', 'src/main/jniLibs/']
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
我能夠成功運行採用了android推動和android殼庫。這是使用Android Studio的apk版本造成的問題。我正在使用Android Studio版本2.3.3。任何幫助,高度讚賞。
嘿泰坦,謝謝你的回答;但使用你的配置我收到以下錯誤:「錯誤:錯誤:'../../../../../jniLibs/x86/libdynamic.so',需要'../../ .. /../build/intermediates/cmake/debug/obj/x86/libnative-lib.so',缺少並且沒有已知規則使其成爲「 –
你有沒有jni.srcDirs = ['src/main/jniLibs /']在native-lib/build.gradle中?因爲這是告訴編譯器你的共享庫在哪裏。 – Titan