我需要在我的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