如何在 Android Studio 中将动态库与 C++ 配合使用?

How do I use a dynamic library in Android Studio with C++?

提问人:Ben GJ 提问时间:11/11/2023 最后编辑:Ben GJ 更新时间:11/18/2023 访问量:41

问:

我一直在尝试在我的 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的初学者,因此请提供详细的解释。

C++ Android-Studio 共享库

评论

0赞 Robert 11/11/2023
Android 上的文件路径从不以 开头,因此尝试从该路径加载库只会在这些平台上失败。C:

答:

0赞 Ben GJ 11/18/2023 #1

为了解决这个问题,我改变了

void* handle = dlopen("C:path/to/SharedLibrary.so", RTLD_LAZY);

void* handle = dlopen("SharedLibrary.so", RTLD_LAZY);

这允许编程成功加载共享库。