HarmonyOS 鸿蒙Next har库集成C的so库运行崩溃

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next har库集成C的so库运行崩溃

har库集成C的so库,并使用napi进行方法封装。  现象是CMakeList 不引用so库(napi方法注释掉C函数调用)的时候,napi方法可以正常执行,并打印相关的日志 但是引用so库时,就会报错napi方法未定义。  希望咨询一下排查手段

3 回复
CMake是HarmonyOS默认支持的构建系统,其语法可参考CMake官方文档,地址:https://cmake.org/cmake/help/v3.16/guide/tutorial/ 鸿蒙官网也给出了在鸿蒙功能模版下引用so的几种样例,可参考“在NDK工程中使用预构建库”:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/build-with-ndk-prebuilts-V5 在“使用DevEco Studio模板构建NDK工程”可参考资料:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/build-with-ndk-ide-V5

通过DevEco建立的Native C++工程为例,基本开发思路和排查方法:

1、定义ArkTs接口: Index.d.ts

2、ArkTs接口与C++映射。napi_init.cpp 中add方法映射,如果add 方法映射没有,IDE在Index.d.ts中会有报错“Declared function 'add' has no native implementation.”。

napi_property_descriptor desc[] = {
        { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
    }; 

3、实现C++代码,模版工程直接在napi_init.cpp中实现了add方法。

4、构建参数配置。CMakeLists.txt中各项可详见“DevEco Studio模板构建NDK工程”,其语法及配置可参考CMake官方文档。

5、运行时排查: a、通过Log view窗口的hilog页签可分析运行时情况及报错。比如检索ldso可检索so库的初始化加载情况。 b、通过Log view窗口的FaultLog可查看奔溃栈。

更详细的“调试和性能分析”可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/2_6_u786c_u4ef6_u517c_u5bb9_u6027-V5

使用下面命令查看so库

/Applications/DevEco-Studio.app/Contents/sdk/HarmonyOS-NEXT-DB1/openharmony/native/llvm/bin/llvm-readelf -dW libuhome_sdk.so  

没有对应的library soname,导致har包引用的时候路径不对,无法找到对应的so库

更多关于HarmonyOS 鸿蒙Next har库集成C的so库运行崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你好,我引入go的编译出来的so库,报这个错误,你这边遇到过嘛

cke_869.png

针对HarmonyOS 鸿蒙Next har库集成C的so库运行崩溃的问题,以下是一些可能的解决方案:

  1. 检查so库兼容性:确保所集成的C语言so库与鸿蒙系统的版本兼容,并且已正确配置在项目的CMakeLists.txt或相关构建文件中。
  2. 审查代码调用:检查代码中调用so库函数的部分,确保传递的参数类型、数量及顺序正确无误。同时,确认在调用前so库已正确加载。
  3. 查看日志信息:使用鸿蒙系统提供的日志工具(如DevEco Studio的Logcat)查看崩溃时的日志信息,过滤关键字如E/(错误)或FATAL,找到崩溃的堆栈跟踪信息。
  4. 检查资源文件:确保所有资源文件(如图片、字符串、布局文件等)都正确引用和加载,资源文件路径错误或资源缺失可能导致应用崩溃。
  5. 更新和测试:将鸿蒙系统、开发工具及所有相关库更新到最新版本,并重新测试应用,确保问题已得到修复。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!