在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeLists.txt编译脚本中声明的预构建库都会被打包。这是为什么?有没有相关的演示代码帮我分析一下呢?
harmonyos
确保引入的SO动态库是通过HarmonyOS NDK 编译工具链编译生成,如何通过HarmonyOS NDK 编译工具链编译预构建库。在 HarmonyOS 中,如何理解这个概念?
您需要先 登录 才能评论/回答
全部评论(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