如何从C ++为我的.so共享库调用LoadLibrary

时间:2016-03-24 19:29:34

标签: android c++ android-ndk shared loadlibrary

我的小型NDK应用程序中不需要任何java。我想加载一个共享的.so库。我想使用jni直接从C ++调用LoadLibrary。有人试过吗?

BTW我已经将.so库和main .so文件一起打包到apk中。 请注意我使用Visual Studio 2015进行android开发,所以没有.mk文件

2 个答案:

答案 0 :(得分:0)

您无需从C ++调用loadLibrary(...)即可使用共享库。您只需在构建C ++代码时链接到它。

查看Google native-activity example中的NDK examples。如果您想使用新的实验性NDK支持,则应参考these examples

更新:对于Visual Studio用户,可能此tutorial on creating a native-activity会更有帮助。

答案 1 :(得分:0)

我设法像这样调用Lo​​adLibrary:

*jclass sysClass = (*env)->FindClass(env, "java/lang/System");
jmethodID loadLib = (*env)->GetStaticMethodID(env, sysClass, "loadLibrary", "(Ljava/lang/String;)V");
jstring jstr1 = (*env)->NewStringUTF(env,"libSharedObject1");
(*env)->CallStaticVoidMethod(env, sysClass, loadLib,jstr1);*

不幸的是,即使它稍后成功运行,它也会在不相关的地方崩溃,因此我的呼叫会导致一些损坏。我也可以像这样调用加载库:

void * lib_handle = dlopen(" /data/data/Android1/lib/libSharedObject1.so",RTLD_LAZY);

遗憾的是,此电话在该位置找不到我的图书馆。如果没有路径它也找不到它,所以我仍然卡住了..