Rttys及Rtty的交叉编译

时间:2022-08-10
本文章向大家介绍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