HarmonyOS 鸿蒙Next native侧链接三方库报错

HarmonyOS 鸿蒙Next native侧链接三方库报错 参考这个官方帖子:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-34-V5

想把瑞芯微官方提供的librkllmrt.so在native端进入工程,按照教程,执行:

  1. 将编译好的so库放到Native工程的entry/libs/arm64-v8a/目录下,并将so库对应的头文件放到entry/src/main/cpp目录层级下(可以在cpp目录下增加一个文件夹专门存放三方so库的头文件)。

  2. 在CMakeList.txt文件中链入so库。

  3. 在Native侧 .cpp文件中引入头文件使用so库的相关能力。

能够编译得到hap,但是触发动作报错,提示无法找到函数定义。

Error message:Cannot read property add of undefined

SourceCode:

hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));
^

Stacktrace:

at anonymous (entry/src/main/ets/pages/Index.ets:17:75)

更多关于HarmonyOS 鸿蒙Next native侧链接三方库报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

编译so的时候需要指定鸿蒙的编译链,才能正常使用

  1. 可以看一下这个帖子的答复:我创建要给c++工程,为什么引用so后,RegisterEntryModule(void)没有被调用-华为开发者问答 | 华为开发者联盟 (huawei.com)

  2. 确保你在代码中包含的头文件路径是正确的,并且这些头文件确实包含了你试图使用的函数的声明,其次API未公开,因为该库是闭源的,可能某些函数或功能没有在提供的头文件中公开,导致无法在你的代码中直接调用

更多关于HarmonyOS 鸿蒙Next native侧链接三方库报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


三方库要拿openharmony的sdk重新编译

瑞芯微这个库没有开源,呜呜呜。单纯用这个库以命令行的形式来调用是可以的,但是放在deveco工程中不行,

在HarmonyOS(鸿蒙Next)中,如果在native侧链接三方库时遇到报错,可能是由于以下原因:

  1. 库文件格式不兼容:确保你的三方库是针对鸿蒙系统编译的,且与当前架构(如ARM、ARM64)匹配。

  2. 符号未定义:检查库中是否有未定义的符号,可能是库未正确编译或缺少依赖项。

  3. 路径问题:确认库文件的路径是否正确配置,链接器能够找到库文件。

  4. 版本冲突:三方库可能与鸿蒙系统的某些库版本冲突,导致链接失败。

  5. 权限问题:确保在编译和链接过程中,相关文件有足够的权限访问。

  6. 工具链问题:使用鸿蒙提供的工具链进行编译和链接,确保工具链版本与系统匹配。

  7. 依赖库缺失:三方库可能依赖其他库,确保所有依赖库都已正确链接。

  8. 编译选项错误:检查编译选项是否正确,特别是与库链接相关的选项。

解决这些问题通常需要检查编译日志,定位具体错误,并根据错误信息进行相应的调整。

回到顶部