【已解决】HarmonyOS 鸿蒙Next DevEco Studio加载动态库so后,ets接口报错问题
【已解决】HarmonyOS 鸿蒙Next DevEco Studio加载动态库so后,ets接口报错问题 设备是RK3568开发板
如图,这是由Native C++的新建工程修改而来,add是hello.cpp中原来的未改动的。我只在cmake通过target_link_libraries几个动态库。 发现只要添加了19行,编出的hap包安装到设备运行报错,如果注释掉19行,运行是正常的,请问应该从哪些方面来排查?
下图index.ets的运行逻辑
下图为hap包中的libs内容
更多关于【已解决】HarmonyOS 鸿蒙Next DevEco Studio加载动态库so后,ets接口报错问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,该问题已反应给相关部门人员,会尽快给您答复
更多关于【已解决】HarmonyOS 鸿蒙Next DevEco Studio加载动态库so后,ets接口报错问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS的分布式文件系统让我在多设备间传输文件变得轻松无比。
遇到了同样的问题,是link的so库有问题吗
是的,我这个是公共的mqtt库,从设备的系统目录里导出来了一个同样的,用来链接就编译过了。
挺奇怪的,看上去是链接的库有问题,尝试更换一个从设备导出的so库之后,运行不会报错了。
另外,配置了build-profile,在externalNativeOptions里面增加abiFilters,指定要编译的库是什么架构的设备用的,这样就不会在编译链中链接其他架构的库。
听起来很像bug,
只在工程的entry/libs下放入libpaho-mqtt3c.so,cmake只对16行和19行两个库进行target_link_libraries
,也一样会报错,是这个mqtt3c.so有什么问题?
在HarmonyOS开发中,使用DevEco Studio加载动态库(.so文件)时,可能会遇到ets接口报错的问题。这通常是由于动态库的接口定义与ArkTS(即ets)中的调用方式不匹配导致的。
首先,确保动态库的接口定义符合HarmonyOS的NDK规范。动态库中的函数需要使用__attribute__((visibility("default")))
来确保其对外可见,并且函数签名需要与ArkTS中的调用一致。
其次,加载动态库时,需要在ets
文件中正确使用native
关键字声明对应的本地方法。例如:
declare native function myNativeFunction(param: string): void;
然后,在ets
文件中调用该本地方法时,确保传递的参数类型和返回类型与动态库中的函数签名一致。
如果仍然报错,可能是由于动态库的加载路径或动态库本身的问题。确保动态库文件正确放置在src/main/resources/rawfile
目录下,并在ets
文件中使用loadLibrary
方法正确加载库文件:
import { loadLibrary } from '@ohos/napi';
loadLibrary('mylibrary');
最后,确保DevEco Studio的NDK版本与动态库的编译环境一致,避免因版本不兼容导致的报错问题。
通过以上步骤,可以解决大部分因动态库加载导致的ets接口报错问题。