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

1 回复

更多关于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


从报错信息和提供的资料来看,这个问题主要是由于动态库链接和打包问题导致的。以下是关键点分析:

  1. 库文件未正确打包:
  • 从build文件夹截图可见,libhv.so等库确实没有被包含进最终产物
  • 在HarmonyOS中,需要确保依赖的.so文件被打包到应用的libs/${OHOS_ARCH}/目录下
  1. 解决方案建议:
# 添加库文件拷贝指令
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})
  1. 检查构建配置:
  • 确认build-profile.json5中已正确配置native相关选项
  • 确保在oh-package.json5中声明了native依赖
  1. 架构差异问题:
  • x86_64能运行而arm64-v8a失败,可能是库文件架构不匹配
  • 检查libhv.so等库文件是否是为arm64-v8a架构编译的纯净版本

建议先验证库文件是否被正确打包到应用的lib/arm64-v8a目录下,这是HarmonyOS加载native库的标准路径。

回到顶部