鸿蒙编译Native C++库及天生头文件(libxml2)
概述本文仅以libxml2为为示例,演示利用DevEco Studio集成环境天生鸿蒙体系利用的动态库及头文件,用于其他项目开辟。
环境
体系: Windows11 X64
DevEco Studio Next Release 5.0.3.900 amd64
OpenHarmony SDK 12
关键点
1. 创建native工程
2. 下载开源代码到src/main/cpp目次
3. 修改cmake
4. 修改工程配置
5.构建
5.实行cmake --install .
示例演示
创建工程
选择NativeC++工程:
https://i-blog.csdnimg.cn/direct/839e91c0bd1544708e70002cfec45aa1.png
https://i-blog.csdnimg.cn/direct/474eb5eb941f42a5930124d088d22ba0.png
下载代码
从GNOME / libxml2 · GitLab下载开源代码代码,并防止入模块/src/main/cpp/目次中。 本文示例为保证代码完整性下载代码后直接添加到目次中,如利用git管理可采用git submodule add 方式直接添加到对应位置,后续更新库天生会更加方便。
https://i-blog.csdnimg.cn/direct/9c86f384e2eb41179317f1bebc7e4d11.png
修改CMakeList.txt
修改外部CMakeList.txt: 删除原始的add_library、target_link_libraries;增长set(LIBXML2_WITH_PYTHON OFF) set(CMAKE_INSTALL_PREFIX ${NATIVERENDER_ROOT_PATH}/../../../build/sdk/${CMAKE_BUILD_TYPE}/${OHOS_ARCH}) add_subdirectory(libxml20)
终极如下。
https://i-blog.csdnimg.cn/direct/9ba0923123f64faeb326472290f07f7d.png
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(LibExample)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
if(DEFINED PACKAGE_FIND_FILE)
include(${PACKAGE_FIND_FILE})
endif()
include_directories(${NATIVERENDER_ROOT_PATH}
${NATIVERENDER_ROOT_PATH}/include)
set(LIBXML2_WITH_PYTHON OFF)
set(CMAKE_INSTALL_PREFIX ${NATIVERENDER_ROOT_PATH}/../../../build/sdk/${CMAKE_BUILD_TYPE}/${OHOS_ARCH})
add_subdirectory(libxml2-master) 删除的内容为删除Native工程模版中的示例代码及库天生。
添加的三行分别为:编译libxml2不带python、设置安装目次、添加libxml2的源码目次(此中包含完整编译用CMakeList.txt文件)
工程其他修改
删撤除src/main/cpp/napi_init.cpp文件
删除src/main/cpp/types/index.d.ts中的所有内容、删除src/main/ets/pages/index.ets中 import testNapi from 'libxxxx.so'和 hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));语句
修改build-profile.json5: externalNativeOptions节点中修改arguments 值为“-DCMAKE_BUILD_TYPE=Debug”,添加 "abiFilters": ["arm64-v8a","x86_64"]
https://i-blog.csdnimg.cn/direct/1c098d411b3946ed9275ab8776e6400d.png
{
"apiType": "stageMode",
"buildOption": {
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "-DCMAKE_BUILD_TYPE=Debug",
"cppFlags": "",
"abiFilters": [
"arm64-v8a",
"x86_64"
]
}
},
"buildOptionSet": [
{
"name": "release",
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": false,
"files": [
"./obfuscation-rules.txt"
]
}
}
},
"nativeLib": {
"debugSymbol": {
"strip": true,
"exclude": []
}
}
},
],
"targets": [
{
"name": "default"
},
{
"name": "ohosTest",
}
]
} 构建
点击构建,构建xxx模块
https://i-blog.csdnimg.cn/direct/8c6c48222f42435fa56a757251c34178.png
cmake install
打开终端,并进入.cxx/default/default/debug/arm64-v8a/
实行cmake.exe --install .
https://i-blog.csdnimg.cn/direct/c8d611a99bef431b8588334f7755e82a.png
同理可到x86_64目次实行
所有产物(include、lib等)目次为最初配置的目次:build/sdk/Debug
https://i-blog.csdnimg.cn/direct/0f1e94ae00704de0ab135203236e9b93.png
遗留题目
配置天生release,修改build-profile.json5中相应的内容为:
"arguments": "-DCMAKE_BUILD_TYPE=Release",
"cppFlags": "-fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -ftrapv -s", 但是天生的位置仍然为.cxx/default/default/debug,在此中实行cmake install 后sdk目次是正常的Release
示例代码
代码链接:LibExample: lib示例
产物SDK的利用
待更新。
关注C++鸿蒙sdk仓库更新。后续将同一采用NDK+脚本直接编译
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]