HarmonyOS鸿蒙Next中实际生成了libsfm.so,但运行时报错

HarmonyOS鸿蒙Next中实际生成了libsfm.so,但运行时报错 自己用napi调用c++去实现的一个sfm的算法库实际生成了libsfm.so,但运行时报错,也没有更明确的报错,库文件已放在附件(删除.txt后缀名解压即可)
[default] [GetNativeOrCjsExports:50] Load native module failed, so is @app:com.fdage.fdkk/entry/sfm
10-22 15:14:36.420 30544-54210 A000FF/com.fdage.fdkk/Flutter com.fdage.fdkk E MethodChannel# --> Failed to handle method callCannot read property callSFM of undefined at onMethodCall (oh_modules/.ohpm/fdage_sfm@vwjjsvgzdulz5j0rp9j7delfaz5hrkybrusztoccaqk=/oh_modules/fdage_sfm/src/main/ets/components/plugin/FdageSfmPlugin.ets:144:34)
at onMessage (oh_modules/.ohpm/@ohos+flutter_ohos@xwi4qggdwbeml3mt1xpvzjkgnysnaqf82h2umqcgnde=/oh_modules/@ohos/flutter_ohos/src/main/ets/plugin/common/MethodChannel.ets:185:20)
at invokeHandler (oh_modules/.ohpm/@ohos+flutter_ohos@xwi4qggdwbeml3mt1xpvzjkgnysnaqf82h2umqcgnde=/oh_modules/@ohos/flutter_ohos/src/main/ets/embedding/engine/dart/DartMessenger.ets:111:17)
at handleMessageFromDart (oh_modules/.ohpm/@ohos+flutter_ohos@xwi4qggdwbeml3mt1xpvzjkgnysnaqf82h2umqcgnde=/oh_modules/@ohos/flutter_ohos/src/main/ets/embedding/engine/dart/DartMessenger.ets:128:12)
at handlePlatformMessage (oh_modules/.ohpm/@ohos+flutter_ohos@xwi4qggdwbeml3mt1xpvzjkgnysnaqf82h2umqcgnde=/oh_modules/@ohos/flutter_ohos/src/main/ets/embedding/engine/FlutterNapi.ets:345:35)

https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/889/996/823/0010086000889996823.20251022155432.93700366479480374738634027373580:50001231000000:2800:8E9B8DCAB2A23EB1DD85EEF5623DF2A51D5EA3246DA1932CF57F51089A2DFC4E.png

https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/889/996/823/0010086000889996823.20251022155443.99581212941403541939667065333814:50001231000000:2800:F9521F0D766BE75C4059CD472FCB4DE498DEDB5E7C91BFC976E073C5A54329CB.png

https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/889/996/823/0010086000889996823.20251022155454.25909271555820406225650864790585:50001231000000:2800:11561B818CA43E6992A0B8C726C37153F5AF1E90F6EC8693942F0CC373652869.png

https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/889/996/823/0010086000889996823.20251022155507.59436822005190152834161698838749:50001231000000:2800:AB8E6A4B722D70FDDC86502249930AF30E4DE52736FEE95085DEF05DD009695F.png


更多关于HarmonyOS鸿蒙Next中实际生成了libsfm.so,但运行时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好,这边加载您提供的附件中的so文件,暂未排查出具体的报错原因,为了进一步分析方便的话可以提供下以下信息吗:

1、是否可以提供一个可以复现的demo;

2、使用的Flutter版本;

3、使用的设备和DevEco Studio版本信息;

更多关于HarmonyOS鸿蒙Next中实际生成了libsfm.so,但运行时报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


问题已经解决了,是这个so文件依赖的其他库的问题,

在HarmonyOS Next中,libsfm.so生成但运行报错可能由以下原因导致:

  1. 依赖库缺失或版本不匹配,需检查动态库依赖关系。
  2. 系统API调用与鸿蒙Next版本不兼容,确认所用API在当前系统版本可用。
  3. 库文件未正确打包或签名,验证HAP包中的库文件完整性。
  4. 内存地址随机化(ASLR)导致加载异常,检查PIE编译选项。
  5. 设备架构与库编译目标架构不一致,确保为arm64-v8a或armeabi-v7a。

使用DevEco Studio的日志工具查看具体错误信息,定位异常模块。

从错误日志分析,问题出现在NAPI模块加载和调用环节。主要问题有两个:

  1. Load native module failed系统无法正确加载libsfm.so
  2. Cannot read property callSFM of undefined:JavaScript端无法访问到native模块的callSFM方法

可能原因和解决方案:

NAPI模块注册问题 检查你的napi_module结构体是否正确导出。确保:

  • nm_modname 字段与JS端import的名称完全匹配
  • nm_register_func 函数正确实现并返回导出对象
  • 模块描述符使用 __attribute__((visibility("default"))) 确保符号可见

模块路径配置 在工程的 build-profile.json5 中确认native模块配置:

"nativeLibs": [
  {
    "name": "sfm",
    "path": "./src/main/cpp"
  }
]

ABI兼容性 确认编译的so文件与目标设备架构匹配(arm64-v8a/armeabi-v7a)。检查CMakeLists.txt中的目标架构设置。

符号导出验证 使用 nm -D libsfm.so 检查导出的符号,确保napi相关函数正确导出。

JS端调用检查 在FdageSfmPlugin.ets中确认import路径正确,且模块初始化成功后再调用callSFM方法。

建议先通过添加详细日志确认模块加载的具体失败原因,然后逐步排查上述各个环节。

回到顶部