Rose开源包

  • 本文要严格区分app、小程序。app指的是单独运行的进程,像launcher、kdesktop。小程序则是在app中可以动态加载的一个库,它是Lua和C++混合编程,像Basic。理论上,一个app可同时加载不受数目限制的小程序。
  • 为简化写法,有时把lib等同静态库,虽然android、iOS上静态库的扩展名是.a;so等同动态库,虽然Windows上动态库的扩展名是.dll。

 

一、包含的开源库

操作系统描述
BoringsslWindows、Android、iOS加/解密、数字安全
CartographerWindows、AndroidSLAM建图,导航时定位
ChromiumWindows、Android、iOS1)处理音、视频数据外的网络任务。2)多线程
Openh264/FfmpegWindowsH264编/解码。Android、iOS都用硬件编/解码
FreeRDPWindows、Android、iOS远程桌面Server,远程桌面Client
LuaWindows、Android、iOS脚本语言
OpenCVWindows、Android、iOS计算机视觉,扫描二维码
ProtobufWindows、Android、iOS把数据结构序列化成二进制流
RosWindows、Android机器人节点通信,导航功能包,机械臂功能包
SDLWindows、Android、iOS1)渲染图像、声音、字体。2)文件系统
TensorFlow LiteWindows、Android、iOS深度学习
WebrtcWindows、Android、iOS采集、传输视/音频
Rose(狭义)Windows、Android、iOSGUI、场景、动画。其它开源库的融合剂代码

因为不同操作系统有不同编译目标,这些开源库编译在哪个库,以及是lib还是so,会有不同。

Chromium、Webrtc都有初始化、结束过程,有着全局状态。它们只可被链接进app,禁止链接进小程序。

一旦编译成lib,同一进程内的app、小程序,它们各自有一套该lib的全局变量,也就是说这些全局变量是独立的。这意味着,一个须要共享全局变量的库,只能编译成so,不能编译成lib,像Ros。

只含有函数包、类包的库适合编译成lib。编译成lib优势是新版本库中接口发生改变时,不会影响旧版本,即能很好做到兼容性。

 

二、Windows

在Windows,用这些开源库除要生成app,还要能生成小程序。

图1 (Windows)Rose包

在Viusal Studio中的项目命令时,在各库的前面加了“4lib”,像chromium.lib改为4libchromium.lib,目的是让Visual Studio在排序项目时,把这些库放在上面,app和小程序则放在下面,方便查看。

如果App不须要Ros功能,可不依赖cartographer,像kDesktop。

“Project Dependend”是指在Visul Studio的“Project Dependencies”设置的依赖关系,它会影响各项目的链接次序。举个例子要链接App,先得编译出librose.lib和cartographer.lib;要链接出librose.lib,先要编译出chromium.lib、tensorflow.lib、3rdparty2.lib、ffmpeg.dll、openh264.dll,依次类推。

对小程序,能直接使用Boringssl、Lua、OpenCV、Protobuf和Ros。但也会创建新建程,使用可等待事件,在这方面chromium、webrtc有很好解决方案,于是提供了api:create_rose_thread、rose_create_event,让小程序接间使用chromium、webrtc中的功能。

gettext放在了3rdparty.dll。原因是gettext有个存储binding链表的变量,为避免这个exe中存在多个binding链表,gettext需要编译为dll。

单独编译chromium.lib,是因为只有它需要LLVM编译器。

单独编译cartographer、tensorflowlite,是因为它们正常运行时须把优化设为“Maximum Optimization (Favor Speed) (/O2)”。等将来tensorflowlite稳定后,可能会把它们合为一个。

不能把abseil-cpp编译成dll,原因是一些函数没被dll_export。

 

三、Android

在Android,用这些开源库除要生成app,还要能生成小程序。

图2 (Android)Rose包

由于没了编译器、优化选项差别,chromium、cartographer、tensorflowlite都和其它库一块编译进app,即libmain.so。

和Windows一样,对小程序,能直接使用Boringssl、Lua、OpenCV、Protobuf和Ros。

 

四、iOS

在iOS,由于不能在运行加载动态库,用这些开源包只须生成app,不须要生成小程序。

图2 (iOS)Rose包

由于没有小程序要求,所有库都和app代码汇成一个工程。

全部评论: 0

    写评论: