HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行
HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行
- DevEco Studio 3.1.1 Release ,
- x86_64 模拟器.
创建Native C++项目, 默认代码 可以在模拟器上运行. 调用了 add方法.
在项目中 集成 opencv库
(使用 api 10 交叉编译链 编译的opencv库)
正常编译, 模拟器上运行崩溃掉.
cmake如下:
生成的hap包里面也有 opencv库
安装过程log:
运行报错:
哪怕hello.cpp里面不调用 opencv的代码,只在CMakeLists.txt 中链接 opencv 也是这个错误.
更多关于HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我的问题与楼主的问题有几分类似,却又不同。
deveco 3.1.1 release
可是我能编译通过,运行却报错:
求教
更多关于HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我和你的问题一样,即使放置在这个目录也会导致native模块在通过import加载时变成undefined
问题解决了, (经其他华为渠道解决了)
链接第三方动态库,
需要把 库放到entry/libs目录下,
CMakeListst中使用 绝对路径来链接.
target_link_libraries(entry PUBLIC ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libopencv_world.so)
希望以后DevEco 能够优化这种小问题
厉害! 我当时直接编译静态库了
后来研究发现, 只要链接了opencv_world库,哪怕 hello.cpp中不调用任何cv代码(也不包含都文件),
初始化"Init"和注册函数 "RegisterEntryModule" 都没有调用,
就是说 libentry.so没有load成功.
在继续发现,偶尔会又这个log
01-16 12:39:37.125 32678-4943/? W 03900/NAPI: [native_module_manager.cpp(LoadModuleLibrary)] dlopen failed: dlopen failed: library "C:/Users/XXXXDevEcoStudioProjects/NameExample/entry/src/main/cpp/opencv/OHOS-x86_64/libopencv_world.so" not found:\
needed by /data/storage/el1/bundle/libs/x86_64/libentry.so in namespace arkUI_default
WOW! 天哪, libentry.so竟然要到 我桌面路径去加载 opencv库,当然加载不到了
使用objdump 查看path,
$ objdump -x libentry.so |grep PATH
RUNPATH C:/Users/XXXXX/DevEcoStudioProjects/NameExample/entry/src/main/cpp/opencv/OHOS-x86_64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
然后通过CMake设置RPATH
set_target_properties(entry PROPERTIES LINK_FLAGS "-Wl,-rpath=$ORIGIN/")
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
通过objdump查看 是生效了(虽然还带着 C盘路径
$ objdump -x libentry.so |grep PATH
RUNPATH $ORIGIN/:C:/Users/XXXX/DevEcoStudioProjects/NameExample/entry/src/main/cpp/opencv/OHOS-x86_64
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
但运行还是崩溃
01-16 15:48:28.739 5077-15660/? W 03F00/ArkCompiler: [default] GetNativeModuleValue:153 GetNativeModuleValue: currentModule /data/storage/el1/bundle/entry/ets/modules.abcfind requireModule@app:com.example.nameexample/entry/entry failed
01-16 15:48:28.739 5077-15660/? D 03F00/ArkCompiler: [ecmascript] Throw error: Cannot read property add of undefined
01-16 15:48:28.739 5077-15660/? D 03F00/ArkCompiler: [ecmascript] at anonymous (entry/src/main/ets/pages/Index.ets:55:51)
楼主 修改了绝对路径还是报错,你这边解决了么
opencv的交叉编译器 用的 10, 模拟器还是 DevEcho 默认安装的.
明白你说的了,用 api9 交叉编译器编译的opencv_world库同样的问题.
HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行的问题,可能是由于多种原因导致的。首先,请确保第三方动态库与鸿蒙系统的兼容性,包括库文件的命名规则、版本号和依赖关系。其次,检查CMakeLists.txt文件中的链接设置,确保使用正确的路径和库名。如果问题依旧存在,可能是系统环境或编译器配置问题,建议详细检查开发环境配置。如果问题依旧没法解决,请加我微信,我的微信是itying888。
更多关于HarmonyOS 鸿蒙Next Native C++ 引用第三方动态库无法运行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html