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的很多目录是只读的,只有部分目录能访问,且需要权限才行
程序自生能访问的路径,通过虚拟路径internal://app/files/访问,直接访问不行