Rttys及Rtty的交叉编译
Rttys及Rtty的交叉编译
Rttys官方的Release仅提供amd64与arm64的版本,并没有armhf的版本,且并不支持将rttys部署到子目录下。
因此需要手工交叉编译一个Rttys。
1.Rttys
Host环境:Ubuntu 18.04.5 (PC)
编译工具链:arm-himix200-linux(解包自arm-himix200-linux.tgz,据说来自Hi3516dv300SDK),海思提供的arm编译工具链
环境变量:执行命令:export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH
由于Rttys中访问Sqlite使用的是modernc.org/sqlite的包,此包不使用C语言的Sqlite库,因此编译时,并不需要全能CGO。
官方的编译脚本:
./build.sh linux amd64/arm64
由于Rttys服务应用打包了前端代码,这些代码需要通过npm来编译,进行ui目录,执行npm install安装依赖包至本地的node_modules目录,然后运行npm run build编译出dist版本的前端代码(系统中需要安装nodejs)。
npm install
npm run build
交叉编译时的命令即为
PATH=$PATH:/xxx/go_1.17.3/bin/ GOOS=linux GOARCH=arm GOARM=7 ./build.sh linux arm
编译后,会生成一个打包的应用,且在相应rttys-linux-arm/目录下存放了相应配置文件。
编译时,如果github等网站访问不畅,可以配置goproxy,如下(两者任选一个):
export GOPROXY=https://goproxy.io,direct
export GOPROXY=https://goproxy.cn,direct
2.Rtty
Rtty的依赖很少,仅依赖libev
2.1 libev
下载最新版本,解压后,并执行如下语句:
env PKG_CONFIG_LIBDIR=/data/app/lib/pkgconfig/ CFLAGS="-g -O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " CXXFLAGS="-g -O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" ./configure --prefix=/data/app --host=arm-linux CC=arm-himix200-linux-gcc
make V=1
make DESTDIR=~/xxx/bin install
2.2 Rtty
Rtty的编译是cmake方式的,这边也要用到其他文章中提到的cross.cmak
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TOOLCHAIN_PATH "/xxx/hisi-linux/arm-himix200-linux")
set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/arm-himix200-linux-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/arm-himix200-linux-g++)
SET(CMAKE_FIND_ROOT_PATH "/data/app")
然后在rtty的目录下创建build目录,并切换至build目录后,执行如下语句:
env PKG_CONFIG_LIBDIR=/data/app/lib/pkgconfig/ CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " cmake -DCMAKE_TOOLCHAIN_FILE=../cross.cmake -DCMAKE_INSTALL_PREFIX=/data/app -DCMAKE_INSTALL_LIBDIR=lib ..
make
make DESTDIR=~/xxx/bin install
这儿编译出来的的rtty,会动态链接libev.so.xxx,而libev的库很小,完全可以静态链接进去,减少依赖。
方法是找到src/CmakeLists.txt文件,修改target_link_libraries为如下:
target_link_libraries(rtty PRIVATE libev.a util crypt m)
修改后,重新执行cmake、make。
这儿发现一个以前的错误:对lib目录下面的文件,如果执行通配的strip后,会损坏静态库文件。
原文地址:https://www.cnblogs.com/eaglexmw/p/16573454.html
- 依赖注入(IOC)二
- Linux Token Auth 一次性密码认证
- WPF备忘录(7)WPF图片资源路径介绍
- 植入式攻击入侵检测解决方案
- 神经网络太臃肿?教你如何将神经网络减小四分之一
- WPF中ListView如何改变选中条背景颜色
- WPF Trigger for IsSelected in a DataTemplate for ListBox items
- C#基础知识回顾--BackgroundWorker介绍
- Elasticsearch 瞬间入门
- 使用OpenLDAP 操作 Windows Active Directory
- 优化算法:到底是数学还是代码?
- Email 服务器之 SPF 记录
- WPF中播放声音媒体文件
- 设计模式学习--装饰者模式(Decorator Pattern)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自定义控件实现球赛比分条效果
- rxjs里concat operators的用法
- rxjs里merge operators的用法
- Android实现多参数文件和数据上传
- 解决pyPdf和pyPdf2在合并pdf时出现异常的问题
- rxjs里scan operators的用法
- rxjs里switchMap operators的用法
- rxjs里concatMap operators的用法
- rxjs里takeWhile operators的用法
- Python sql注入 过滤字符串的非法字符实例
- rxjs里combineLatest operators的用法
- rxjs里withLatestFrom operators的用法
- rxjs里distinctUntilChanged operators的用法
- pycharm安装及如何导入numpy
- rxjs里debounceTime operators的用法