HarmonyOS鸿蒙Next中app开发,动态库无法调用系统动态库

HarmonyOS鸿蒙Next中app开发,动态库无法调用系统动态库

app开发,动态库无法调用系统动态库
3 回复

应该是路径传递不对,参考以下代码

let path = getContext(this).bundleCodeDir; // 获取项目路径
testNapi.add(2, 3, path + '/libs/arm64-v8a/xxx.so')
native static napi_value Add(napi_env env, napi_callback_info info) {    
    size_t argc = 3;    
    napi_value args[3] = {nullptr};    
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);    
    napi_valuetype valuetype0; napi_typeof(env, args[0], &valuetype0);    
    napi_valuetype valuetype1; napi_typeof(env, args[1], &valuetype1);    
    double value0; napi_get_value_double(env, args[0], &value0);    
    double value1; napi_get_value_double(env, args[1], &value1);    
    napi_value sum; napi_create_double(env, value0 + value1, &sum);    
    char* path = new char[1024];    
    size_t size = 1024;    
    napi_get_value_string_utf8(env, args[2], path, 255, &size); // 获取动态库路径信息    
    void *handle = dlopen(path, RTLD_LAZY); // 打开一个动态链接库.路径为path    
    if (!handle)    
    {        
        OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF0000, "dlopen", "%{public}s.",path);        
        return 0;    
    }    
    OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF0000, "dlopen error", "%{public}s.",path);    
    dlclose(handle);
    return sum;    
}

开发者您好,发现您没有为 [libhilog_ndk.z.so] [libc++_shared.so] [libc.so] 指定so name

请参考一下链接修改 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/build-with-ndk-prebuilts-V5

更多关于HarmonyOS鸿蒙Next中app开发,动态库无法调用系统动态库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,如果动态库无法调用系统动态库,可能是由于动态库的依赖关系未正确配置或系统库的路径未正确设置。确保在BUILD.gn文件中正确声明依赖关系,并使用shared_librarystatic_library模块。检查ldflagslibs配置,确保系统库路径正确。

在HarmonyOS Next开发中遇到动态库无法调用系统动态库的问题,可能是由于以下几个原因导致的:

  1. 依赖配置问题:请检查您的动态库是否正确声明了对系统动态库的依赖关系。在模块的build-profile.json中需要正确配置依赖项。

  2. 权限问题:某些系统动态库可能需要特定权限才能访问,请检查是否在config.json中声明了所需权限。

  3. 加载路径问题:HarmonyOS Next对动态库的加载路径有严格限制,确保您的动态库位于正确的目录下(通常是libs目录)。

  4. API版本兼容性:检查您调用的系统动态库API是否与当前HarmonyOS SDK版本兼容。

  5. 符号可见性:系统动态库可能对某些符号做了隐藏处理,需要使用正确的头文件和链接方式。

建议先检查日志输出,通常会包含动态库加载失败的具体原因。如果问题仍未解决,可以提供更详细的错误日志以便进一步分析。

回到顶部