HarmonyOS鸿蒙Next中应用自带的动态链接库在运行时是在哪个路径呢?就是我想在运行期间通过 dlopen 动态加载一个库,而不是编译时就链接;但我看文档里好像没有写这个库存在啥位置

HarmonyOS鸿蒙Next中应用自带的动态链接库在运行时是在哪个路径呢?就是我想在运行期间通过 dlopen 动态加载一个库,而不是编译时就链接;但我看文档里好像没有写这个库存在啥位置 【问题描述】:应用自带的动态链接库在运行时是在哪个路径呢?就是我想在运行期间通过 dlopen 动态加载一个库,而不是编译时就链接;但我看文档里好像没有写这个库存在啥位置

【问题现象】:需求

【版本信息】:开发工具版本:6.0、Api语言版本:20

2 回复

鸿蒙Next应用的自带动态库位于应用沙箱内,路径为/data/storage/el2/base/libs/。该目录存放应用包内的原生库文件。运行时可通过dlopen加载此路径下的库,需使用绝对路径或正确设置LD_LIBRARY_PATH

更多关于HarmonyOS鸿蒙Next中应用自带的动态链接库在运行时是在哪个路径呢?就是我想在运行期间通过 dlopen 动态加载一个库,而不是编译时就链接;但我看文档里好像没有写这个库存在啥位置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,应用自带的动态链接库(.so文件)在安装后会被提取并存储到应用沙箱内的特定目录下。运行时,你可以通过应用的**files/lib**路径来访问这些库文件。

具体来说,动态链接库的运行时路径为:

/data/storage/el2/base/haps/<your_bundle_name>/files/lib/

其中<your_bundle_name>是你的应用包名。

因此,在代码中使用dlopen动态加载时,你可以基于此沙箱路径拼接库文件名。例如:

void* handle = dlopen("/data/storage/el2/base/haps/com.example.myapp/files/lib/mylib.so", RTLD_LAZY);

需要注意的是,HarmonyOS Next的应用模型和文件系统访问遵循严格的沙箱规则,你只能直接访问自己应用沙箱内的路径。如果库文件被打包在HAP中,系统会在安装时自动将其释放到上述files/lib目录。

回到顶部