HarmonyOS鸿蒙Next中通过NDK编译的arm64-v8a的libhv.so库在运行时报错,Error loading header: can't find library libhv.so in namespace: moduleNs_default
HarmonyOS鸿蒙Next中通过NDK编译的arm64-v8a的libhv.so库在运行时报错,Error loading header: can’t find library libhv.so in namespace: moduleNs_default
cmake代码如下:
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(sslvpnsdk)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(LIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/${OHOS_ARCH})
add_library(${CMAKE_PROJECT_NAME} SHARED napi_init.cpp)
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
libace_napi.z.so
libhilog_ndk.z.so
${LIB_PATH}/libhv.so
${LIB_PATH}/libssl.so
${LIB_PATH}/libcrypto.so
${LIB_PATH}/libfko.so
${LIB_PATH}/libvpnbase.so)
libhv路径:
build文件夹:
可以明显看到libhv,libfko,libvpnbase这3个so没有被编进来
报错信息:
奇怪的是,编译的x86_64的so可以在模拟器上运行,arm64-v8a的在mate60上就运行时报错
刚接触鸿蒙,有没有大佬看一下,感谢
更多关于HarmonyOS鸿蒙Next中通过NDK编译的arm64-v8a的libhv.so库在运行时报错,Error loading header: can't find library libhv.so in namespace: moduleNs_default的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中通过NDK编译的arm64-v8a的libhv.so库在运行时报错,Error loading header: can't find library libhv.so in namespace: moduleNs_default的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
从报错信息和提供的资料来看,这个问题主要是由于动态库链接和打包问题导致的。以下是关键点分析:
- 库文件未正确打包:
- 从build文件夹截图可见,libhv.so等库确实没有被包含进最终产物
- 在HarmonyOS中,需要确保依赖的.so文件被打包到应用的libs/${OHOS_ARCH}/目录下
- 解决方案建议:
# 添加库文件拷贝指令
file(COPY ${LIB_PATH}/libhv.so DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
file(COPY ${LIB_PATH}/libfko.so DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
file(COPY ${LIB_PATH}/libvpnbase.so DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
- 检查构建配置:
- 确认build-profile.json5中已正确配置native相关选项
- 确保在oh-package.json5中声明了native依赖
- 架构差异问题:
- x86_64能运行而arm64-v8a失败,可能是库文件架构不匹配
- 检查libhv.so等库文件是否是为arm64-v8a架构编译的纯净版本
建议先验证库文件是否被正确打包到应用的lib/arm64-v8a目录下,这是HarmonyOS加载native库的标准路径。