HarmonyOS 鸿蒙Next中求助如何加载c++的.so包

HarmonyOS 鸿蒙Next中求助如何加载c++的.so包 目前是把我的c++SDK编译打包成了鸿蒙适用的so包

然后在deveco studio里新建了个native c++工程,然后把打包后的so包放在了entry/libs/arm64-v8a下面

之后在src/main/cpp里面配置了一些桥接口之类的

现在的问题是运行后会出现这个问题

[(native_module_manager.cpp:1103)(FindNativeModuleByDisk)] First attempt: load app module failed. Error loading path /system/lib64/module/libtest_sdk.z.so:No such file or directory

                                                                                    Second attempt: load app module failed. Error loading path /system/lib64/module/libtest_sdk_napi.z.so:No such file or directory

想问下各位大佬我的流程有什么问题吗?还有这个加载包的问题应该如何解决呢?


更多关于HarmonyOS 鸿蒙Next中求助如何加载c++的.so包的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

【背景知识】 Native工程引入三方so库,可将已经生成的so库置于entry/libs对应架构的目录下,将头文件放置到cpp目录下。修改CMakeLists.txt,将so库加入工程编译引用并在Native侧引入头文件使用。

【解决方案】

尊敬的开发者,这边看到你已经把打包后的so包放在了entry/libs/arm64-v8a下面,排查一下后续流程是否正确,具体:Native工程引入三方so库

更多关于HarmonyOS 鸿蒙Next中求助如何加载c++的.so包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


大佬,我在按文档操作的时候如果在cmakelist连接自己的包的时候target_link_libraries(entry PUBLIC ${NATIVERENDER_ROOT_PATH}/…/…/…/libs/arm64-v8a/libtest_sdk.so)就会出现这个报错(LoadModuleLibrary)] First attempt: load app module failed. Error loading shared library eaderpad_max_install_names: No such file or directory (needed by /data/storage/el1/bundle/libs/arm64/libentry.so) Second attempt: load module default/entry failed. module path is empty,如果cmakelist里不链接自己的包就不会出现,是为什么呢,看样子是跟eaderpad_max_install_names这个东西有关系?

楼主你好,已在最新楼层回复,

在HarmonyOS鸿蒙Next中,通过Native API加载C++的.so包。使用System.loadLibrarySystem.load方法加载动态库。确保.so文件位于模块的libs/arm64-v8a(或其他对应架构)目录下,并在build-profile.json中配置externalNativeOptions指定CMake路径。使用NAPI进行JS与C++交互。

问题在于.so文件的部署路径和加载方式。鸿蒙Next的Native模块需要明确配置模块描述文件(module.json5),确保.so文件被正确打包和识别。

检查以下配置:

  1. 在module.json5中确认已声明nativeLibrary路径,例如:
"nativeLibraryPath": "libs/arm64-v8a/libtest_sdk.z.so"
  1. 确认CMakeLists.txt中已正确链接该库:
target_link_libraries(your_target PRIVATE test_sdk)
  1. 确保.so文件在hvigor构建脚本中被包含到最终应用中,避免部署时遗漏。

运行时错误提示找不到/system/lib64/module/下的文件,表明系统未在预期位置发现模块。这通常是因为模块描述或构建配置不正确,导致.so未被正确打包到应用内。请检查上述配置项,确保路径和依赖设置准确。

回到顶部