讨论广场 问答详情
在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeLists.txt编译脚本中声明的预构建库都会被打包。这是为什么?有没有相关的演示代码帮我分析一下呢?
aurora6688 2026-08-23 00:52:03
43 评论 分享
harmonyos

确保引入的SO动态库是通过HarmonyOS NDK 编译工具链编译生成,如何通过HarmonyOS NDK 编译工具链编译预构建库。在 HarmonyOS 中,如何理解这个概念?

43 评论 分享
写回答
全部评论(1)

在NDK工程中使用预构建库

在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeLists.txt编译脚本中声明的预构建库都会被打包。

预构建库使用约束

1.确保引入的SO动态库是通过HarmonyOS NDK 编译工具链编译生成,如何通过HarmonyOS NDK 编译工具链编译预构建库,请参考CMake构建三方库适配流程

2.确保引入的SO动态库的依赖库也导入到工程中且通过HarmonyOS NDK 编译工具链编译生成。

在模块的CMakeLists.txt编译脚本中通过add_library添加所需的预构建库,并声明预构建库路径等信息后,可以在target_link_libraries中声明链接该预构建库,脚本示例如下所示:

add_library(library SHARED hello.cpp)

add_library(avcodec_ffmpeg SHARED IMPORTED)
set_target_properties(avcodec_ffmpeg
    PROPERTIES
    IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FFmpeg/libs/${OHOS_ARCH}/libavcodec_ffmpeg.so)

target_link_libraries(library PUBLIC libace_napi.z.so avcodec_ffmpeg)

在模块的CMakeLists.txt编译脚本中添加include_directories:

include_directories(
    # ...
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FFmpeg/include
)

 

2026-08-23 00:53:11