鸿蒙编译boost整合linux跨平台应用

openharmony

deveco 4.1支持armeabi-v7a
deveco 5.0后不支持arm32位系统

boost编译

使用deveco的写cmake集成boost
boost使用1.88的最新版本,带cmake工具链
https://github.com/boostorg/boost.git
boost的源码都在sub_module中

deveco 4.1的版本sdk最高到9,cmake版本比较低,类似下面的错误(sdk9中兼容性不太好,很多函数头文件中没有定义,sdk高版本中才有)

  • The property “CMAKE_CXX_STANDARD_REQUIRED” is not allowed

通过使用sdk13等高版本的cmake可以解决,cmake版本3.22

通过subdirs集成boost项目到项目中,点击deveco run执行编译

subdirs(
    d:/opensource/boost            //deveco中项目只能一个个添加后注释的方式编译,一个项目错误,其他项目都会停止编译
)

编译生成的文件都在本项目中,即使subdirs不在本项目中

  • a文件在.cxx目录中的
  • so文件在build/intermediates
    在这里插入图片描述

使用boost

编译完成后可以注释掉subdirs模块

subdirs(
    d:/opensource/boost
)

使用find_package查找boost库信息,编译好的so和a通过手动指定路径的方式导入
如何还是找不到,使用set的方式手动添加定义

set(Boost_DIR d:/opensource/boost)
set(Boost_INCLUDE_DIR d:/opensource/boost/libs/config/include)

链接问题

使用objdump查看完整的函数信息

objdump -tC libboost_log.so.1.88.0 |grep boost::log::v2_mt_posix::aux::default_attribute_names::line_id

鸿蒙中cmake设置输出so文件,通过查找源码函数定义,发现cmake添加如下定义才能链接成功

add_definitions(-DBOOST_ALL_DYN_LINK)

c++后端server

后端使用drogon搭建webserver,前端js使用浏览器嵌入的方式

import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct WebComponent {
  controller: webview.WebviewController = new webview.WebviewController();
  @State mode: MixedMode = MixedMode.All;
  aboutToAppear() {
    // 配置Web开启调试模式
    webview.WebviewController.setWebDebuggingAccess(true);
  }
  build() {
    Column() {
      Web({
        src:$rawfile('dist/index.html'),
        controller: this.controller })
          .mixedMode(this.mode)
          .domStorageAccess(true)
          .fileAccess(true)
    }
  }
}

权限问题:
module.json5中需要配置相应的权限,且低于1024的网络端口需要特殊权限,最好修改端口

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC",     //可以不用,局域网数据传输用
        "reason": "$string:app_name",
        "usedScene": {
          "abilities": [
            "com.example.EntryAbility"
          ],
          "when": "always"
        }
      }

drogon+boost跨windows、linux、openharmony的应用,完全没问题^_^

唯一的问题是openharmony的很多目录是只读的,只有部分目录能访问,且需要权限才行

程序自生能访问的路径,通过沙盒路径访问,直接访问物理路径不行
在这里插入图片描述
物理路径需要和沙盒中的路径对应
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-sandbox-directory

应用沙箱路径物理路径
/data/storage/el1/bundle应用安装包目录:
/data/app/el1/bundle/public/<PACKAGENAME>
/data/storage/el1/base应用el1级别加密数据目录:
- 非独立沙箱运行的应用:/data/app/el1/<USERID>/base/<PACKAGENAME>
- 以独立沙箱运行的Extension应用: /data/app/el1/<USERID>/base/+extension-<EXTENSIONPATH>+<PACKAGENAME>
/data/storage/el2/base应用el2级别加密数据目录:
- 非独立沙箱运行的应用:/data/app/el2/<USERID>/base/<PACKAGENAME>
- 以独立沙箱运行的Extension应用: /data/app/el2/<USERID>/base/+extension-<EXTENSIONPATH>+<PACKAGENAME>
/data/storage/el1/database应用el1级别加密数据库目录:
- 非独立沙箱运行的应用:/data/app/el1/<USERID>/database/<PACKAGENAME>
- 以独立沙箱运行的Extension应用:/data/app/el1/<USERID>/database/+extension-<EXTENSIONPATH>+<PACKAGENAME>
/data/storage/el2/database应用el2级别加密数据库目录:
- 非独立沙箱运行的应用:/data/app/el2/<USERID>/database/<PACKAGENAME>
- 以独立沙箱运行的Extension应用:/data/app/el2/<USERID>/database/+extension-<EXTENSIONPATH>+<PACKAGENAME>
/data/storage/el2/distributedfiles/mnt/hmdfs/<USERID>/account/merge_view/data/<PACKAGENAME>

onDestroyx

鸿蒙onDestroy不会销毁进程(除非系统配置里面强制停止,或者hdc shell kill),套接字重复打开可能有问题,需要定义结束进程的接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪力左手

囧rz

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值