如何在 Android Studio 中通过 C++ 使用动态库?

问题描述 投票:0回答:1

我一直在尝试在我的 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 的初学者,因此将不胜感激详细的解释。

android c++ android-studio shared-libraries
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.