提问人:Ben GJ 提问时间:11/11/2023 最后编辑:Ben GJ 更新时间:11/18/2023 访问量:41
如何在 Android Studio 中将动态库与 C++ 配合使用?
How do I use a dynamic library in Android Studio with C++?
问:
我一直在尝试在我的 android studio c++ 游戏活动项目中使用动态(共享)库,但是我的项目没有成功打开共享库,并且我无法在网上找到任何适合我的东西。共享库是从共享库(Android、IOS)类型的 Visual Studio 项目生成的 .so 文件。我使用的是 Android Studio 版本 17.0.6 和 Visual Studio 2022 版本 17.7.6。我使用的是 Windows 11。
到目前为止,我已经尝试在我的主文件夹中创建一个 jniLibs 文件夹并放置适当的子文件夹(x86_64、arm64-v8a 等),并将适当的 .so 文件放入其中。然后,我在cmake.txt文件中加载库,这可以工作,但是当我尝试在代码中加载库时,它无法加载库。我用于尝试加载库的代码如下:
add_library(libSharedLibrary SHARED IMPORTED)
set_target_properties(libSharedLibrary PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/SharedLibrary.so)
void callFunctionFromSharedLibrary() {
void* handle = dlopen("C:path/to/SharedLibrary.so", RTLD_LAZY);
if(handle) {
aout << "Successfully loaded shared library" << std::endl;
dlclose(handle);
}
else {
aout << "Failure to load shared library" << std::endl;
}
}
当前,代码输出加载失败。我已经检查了路径是否正确,重新加载并重建了项目,并重新创建了共享库文件。我担心的另一点是 Android Studio IDE 似乎无法识别 .so 文件。我不确定这是否与我在使用 DLL 的 Windows 上有关,或者这是否意味着我不能使用这种类型的共享库。任何信息将不胜感激。请注意,我是Android Studio的初学者,因此请提供详细的解释。
答:
0赞
Ben GJ
11/18/2023
#1
为了解决这个问题,我改变了
void* handle = dlopen("C:path/to/SharedLibrary.so", RTLD_LAZY);
自
void* handle = dlopen("SharedLibrary.so", RTLD_LAZY);
这允许编程成功加载共享库。
评论
C: