NEWS DETAIL

鸿蒙 NDK开发:使用预构建库(四)

发布时间:2026/10/27 11:18:26 · 栏目:资讯中心

尧图网络原创建站知识分享正文
在NDK工程中可以通过CMake语法规则引入并使用预构建库。模块libs目录中的预构建库以及在CMakeLists.txt中声明的预构建库都会被打包。一、预构建库使用约束说明编译工具链确保引入的SO动态库是通过HarmonyOS NDK编译工具链生成的依赖库确保引入的SO动态库的依赖库也导入到工程中且通过HarmonyOS NDK编译工具链生成二、直接引入预构建库2.1 文件结构示例预构建库文件存放路径示例entry/src/main/ ├── cpp/ │ ├── third_party/ │ │ └── FFmpeg/ │ │ ├── include/ # 头文件目录 │ │ └── libs/ # 库文件目录 │ │ ├── arm64-v8a/ │ │ │ └── libavcodec_ffmpeg.so │ │ └── armeabi-v7a/ │ │ └── libavcodec_ffmpeg.so │ └── CMakeLists.txt2.2 CMakeLists.txt配置# 添加源码产物 add_library(library SHARED hello.cpp) # 添加预构建库IMPORTED表示预构建 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) # 添加头文件目录 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FFmpeg/include )说明add_library(avcodec_ffmpeg SHARED IMPORTED)IMPORTED表示这是预构建库不需要编译set_target_properties设置IMPORTED_LOCATION属性指定库文件路径${OHOS_ARCH}根据编译架构自动选择对应目录arm64-v8a/armeabi-v7a等2.3 HAR中使用预构建库当在HAR中使用预构建库时当前编译的库和链接所需预构建库会打包到HAR中的libs目录下。三、预构建库的SONAME问题如果预构建SO没有设置SONAME链接器将会将SO的绝对路径插入到依赖这个SO的二进制文件的dynamic section中。当这些二进制文件随HAP包发布运行时动态加载器可能最终无法找到这个SO而导致错误。检查SONAME使用llvm-readelf工具查看SO文件是否设置了SONAME# 工具路径 ${DevEco Studio安装目录}/sdk/default/openharmony/native/llvm/bin/llvm-readelf # 示例命令 ${YOUR_PATH}/command-line-tools/sdk/default/openharmony/native/llvm/bin/llvm-readelf -d libavcodec_ffmpeg.so | grep SONAME # 正确输出示例 0x000000000000000e (SONAME) Library soname: [libavcodec_ffmpeg.so]设置SONAME的方法构建方式设置方法CMake构建默认会设置SONAME只要目标平台支持其他构建工具通过配置ldflags设置clang ... -Wl,-soname,libavcodec_ffmpeg.so四、使用远程依赖HAR中集成的预构建库# 设置依赖路径 set(DEPENDENCY_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules) # 添加预构建库 add_library(library SHARED IMPORTED) # 设置库文件路径 set_target_properties(library PROPERTIES IMPORTED_LOCATION ${DEPENDENCY_PATH}/library/libs/${OHOS_ARCH}/liblibrary.so ) # 链接到主产物 add_library(entry SHARED hello.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so library)路径说明../../../oh_modules是远程依赖HAR在工程中的默认存放位置。五、使用本地HAR中集成的预构建库# 设置本地HAR库路径 set(LIBRARY_DIR ${NATIVERENDER_ROOT_PATH}/../../../../library/build/default/intermediates/libs/default/${OHOS_ARCH}/) # 添加预构建库 add_library(library SHARED IMPORTED) # 设置库文件路径 set_target_properties(library PROPERTIES IMPORTED_LOCATION ${LIBRARY_DIR}/liblibrary.so ) # 链接到主产物 add_library(entry SHARED hello.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so library)六、核心点要点说明预构建库声明add_library(库名 SHARED IMPORTED)路径设置set_target_propertiesIMPORTED_LOCATION架构区分使用${OHOS_ARCH}变量区分不同架构SONAME要求预构建SO必须设置SONAME否则运行时可能加载失败打包范围libs目录中的预构建库和CMakeLists.txt中声明的都会被打包路径类型路径类型说明示例本地预构建库工程内直接引用${CMAKE_CURRENT_SOURCE_DIR}/libs/${OHOS_ARCH}/xxx.so远程HAR依赖通过ohpm依赖的HAR${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules/xxx/libs/${OHOS_ARCH}/xxx.so本地HAR依赖本地HAR的构建产物${NATIVERENDER_ROOT_PATH}/../../../../library/build/default/intermediates/libs/default/${OHOS_ARCH}/
✦

本文为尧图网络原创建站知识分享。想针对自身行业获取定制化建站方案?欢迎咨询,资深顾问免费为你出思路。

RELATED

相关 资讯推荐

MORE

更多 新鲜资讯

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析
2026/10/26 17:54:34

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析

1. 项目概述:从零开始,用JMeter搞定HTTP性能测试 刚接触性能测试的新手,或者是从功能测试转过来的朋友,一听到“压测”两个字,心里可能就有点发怵。工具那么多,概念那么杂,从哪儿下手呢&#xf…

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统
2026/10/27 6:06:58

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统

最近我用TypeScript写了一个运行在浏览器里的Web操作系统 Earendel(目前已知的距离地球最遥远的恒星)。开发它的初衷主要是为了Linux和操作系统课程的教学。市面上绝大多数Web OS项目,要么只是做了一个长得像Windows/macOS的网页UI拼盘&#…

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]
2026/10/27 4:11:25

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形🚀 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: http…

从零制作同人动画:技术路线、流程与实战避坑指南
2026/10/26 20:41:04

从零制作同人动画:技术路线、流程与实战避坑指南

1. 先搞清楚这个“粉丝动画”到底是什么,以及它能解决什么问题看到“五条悟VS宿傩/咒术回战粉丝动画”这个标题,很多人的第一反应可能是去找一个现成的视频。但如果你是一个想自己动手创作、或者想了解这类作品背后技术流程的创作者,这个标题…

闭源降价80%,开源却在涨价:AI定价的交叉路口
2026/10/27 6:39:33

闭源降价80%,开源却在涨价:AI定价的交叉路口

8月6日,两条价格曲线悄然交汇。 一条向下:OpenAI把GPT-5.6 Luna的输出价格从6美元砍到1.2美元/百万Token,降幅80%。另一条向上:同一天,DeepSeek公告全线涨价,措辞是"涨幅较大",非试探…

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买
2026/10/27 5:09:26

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买经常有工厂朋友拿着网上的"三防平板十大品牌排行榜"来问我:到底选哪个?说实话排行榜看看就行,真正选型得看你产线什么场景。今天挑五个在产线数字化里用得比较多的品牌—…

看完这篇,还想了解更多?

预约尧图网络顾问一对一沟通,针对你的行业与现状给出建站建议,全程免费。

免费咨询