鸿蒙编译Native C++库及天生头文件(libxml2)

打印 上一主题 下一主题

主题 792|帖子 792|积分 2376

概述

本文仅以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++工程:


下载代码

从GNOME / libxml2 · GitLab下载开源代码代码,并防止入模块/src/main/cpp/目次中。 本文示例为保证代码完整性下载代码后直接添加到目次中,如利用git管理可采用git submodule add 方式直接添加到对应位置,后续更新库天生会更加方便。

修改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)
终极如下。

  1. # the minimum version of CMake.
  2. cmake_minimum_required(VERSION 3.5.0)
  3. project(LibExample)
  4. set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
  5. if(DEFINED PACKAGE_FIND_FILE)
  6.     include(${PACKAGE_FIND_FILE})
  7. endif()
  8. include_directories(${NATIVERENDER_ROOT_PATH}
  9.                     ${NATIVERENDER_ROOT_PATH}/include)
  10. set(LIBXML2_WITH_PYTHON OFF)
  11. set(CMAKE_INSTALL_PREFIX ${NATIVERENDER_ROOT_PATH}/../../../build/sdk/${CMAKE_BUILD_TYPE}/${OHOS_ARCH})
  12. 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"]

  1. {
  2.   "apiType": "stageMode",
  3.   "buildOption": {
  4.     "externalNativeOptions": {
  5.       "path": "./src/main/cpp/CMakeLists.txt",
  6.       "arguments": "-DCMAKE_BUILD_TYPE=Debug",
  7.       "cppFlags": "",
  8.       "abiFilters": [
  9.         "arm64-v8a",
  10.         "x86_64"
  11.       ]
  12.     }
  13.   },
  14.   "buildOptionSet": [
  15.     {
  16.       "name": "release",
  17.       "arkOptions": {
  18.         "obfuscation": {
  19.           "ruleOptions": {
  20.             "enable": false,
  21.             "files": [
  22.               "./obfuscation-rules.txt"
  23.             ]
  24.           }
  25.         }
  26.       },
  27.       "nativeLib": {
  28.         "debugSymbol": {
  29.           "strip": true,
  30.           "exclude": []
  31.         }
  32.       }
  33.     },
  34.   ],
  35.   "targets": [
  36.     {
  37.       "name": "default"
  38.     },
  39.     {
  40.       "name": "ohosTest",
  41.     }
  42.   ]
  43. }
复制代码
构建

点击构建,构建xxx模块

cmake install

打开终端,并进入.cxx/default/default/debug/arm64-v8a/
实行cmake.exe --install .

同理可到x86_64目次实行
所有产物(include、lib等)目次为最初配置的目次:build/sdk/Debug
 


遗留题目

配置天生release,修改build-profile.json5中相应的内容为:
  1. "arguments": "-DCMAKE_BUILD_TYPE=Release",
  2. "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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表