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)




更多关于HarmonyOS鸿蒙Next中实际生成了libsfm.so,但运行时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,这边加载您提供的附件中的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生成但运行报错可能由以下原因导致:
- 依赖库缺失或版本不匹配,需检查动态库依赖关系。
- 系统API调用与鸿蒙Next版本不兼容,确认所用API在当前系统版本可用。
- 库文件未正确打包或签名,验证HAP包中的库文件完整性。
- 内存地址随机化(ASLR)导致加载异常,检查PIE编译选项。
- 设备架构与库编译目标架构不一致,确保为arm64-v8a或armeabi-v7a。
使用DevEco Studio的日志工具查看具体错误信息,定位异常模块。
从错误日志分析,问题出现在NAPI模块加载和调用环节。主要问题有两个:
- Load native module failed:系统无法正确加载libsfm.so
- 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方法。
建议先通过添加详细日志确认模块加载的具体失败原因,然后逐步排查上述各个环节。
 
        
       
                   
                   
                  

