EasyDarwin的交叉编译
easyDarwin的交叉编译
- 前言
- 一、EasyDarwin简介
- 二、配置环境介绍
- 三、交叉编译过程
- 1.go环境的搭建
- 2.编译
- 后记
前言
最近项目有个需求是在嵌入式设备中运行一个RTSP服务器,满足推流到该服务器后,其他终端设备能够从这个RTSP服务器中拉RTSP流出来。找来找去找到了easyDarwin这个开源项目,主要记录一下交叉编译的过程吧。
一、EasyDarwin简介
“高性能开源RTSP流媒体服务器,基于go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡,基…”
看到基于go语言研发这一段几乎让我差点放弃交叉编译,还好百度了一下发现好像也有用go语言做嵌入式的大佬,所以似乎有搞头。
二、配置环境介绍
1.编译环境:Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
2.交叉编译工具:arm-histbv320-linux
三、交叉编译过程
1.go环境的搭建
go环境的搭建主要参照这里:嵌入式linux之go语言开发(一)环境搭建
简述一下过程,就是用gcc先编译go1.4编译器的源码,然后用编好的go1.4编译器去编译用go写的go1.11的ARM编译器(这里似乎有点绕),然后用ARM版的go编译器去编译easydarwin。具体过程不再展开,博主介绍的挺详细的,按照步骤操作就行。
2.编译
EasyDarwin的下载:https://github.com/EasyDarwin/EasyDarwin
下载的时候注意下载master就行了正常编译:
编译的话建议先按照下载页面的二次开发部分编译一遍,注意需要编译环境能上外网,并且使用root权限编译# go tools go get -u -v github.com/kardianos/govendor go get -u -v github.com/penggy/gobuild# npm tools npm i -g apidoc npm i -g rimraf#这步其实是在下载代码,已经下载过的话直接跳过即可 cd $GOPATH/src/github.com mkdir EasyDarwin && cd EasyDarwin git clone https://github.com/EasyDarwin/EasyDarwin.git --depth=1 EasyDarwin cd EasyDarwin#编译linux版本 npm run build:lin
编译完成之后,就会在EasyDarwin目录下生成一个可执行文件easydarwin,直接运行即可,运行结果如下图所示:
交叉编译
正常编译运行之后,我们大致了解了正常运行起来之后的样子,接下来就开始交叉编译。
首先确保编译ARM版本时配置的环境变量依然存在,我的环境变量配置如下:#go1.4 build env 使用go1.4编译go1.11时需要配置的环境变量 export GOROOT_BOOTSTRAP=/home/weiwei/opennSources/go #go1.11 build env 使用go1.11编译easydarwin需要配置的环境变量,CC_FOR_TARGET和CXX_FOR_TARGET一定要设置为交叉编译工具所在的路径 export CC_FOR_TARGET=/home/weiwei/hisi/HiSTBLinuxV100R005C00SPC070/tools/linux/toolchains/arm-histbv320-linux/bin/arm-histbv320-linux-gcc export CXX_FOR_TARGET=/home/weiwei/hisi/HiSTBLinuxV100R005C00SPC070/tools/linux/toolchains/arm-histbv320-linux/bin/arm-histbv320-linux-g++export GOROOT=/home/weiwei/opennSources/go1.11/go export GOBIN=$GOROOT/bin export GOPATH=/home/weiwei/opennSources/gopath export PATH=$PATH:$GOBIN:GOPATH/bin
上述环境变量配置完毕之后,就可以编译easydarwin了,首先进入easydarwin的目录,找到package.json文件,其中有这一段:
"scripts": {"build:ico": "rsrc -arch amd64 -ico ed.ico -o EasyDarwin_windows.syso","build:www": "cd web_src && npm run build && cd .. && apidoc -i routers -o www/apidoc","build:doc": "apidoc -i routers -o www/apidoc","build:win": "go build -tags release -ldflags \"-s -w\" -o EasyDarwin.exe","build:lin": "go build -tags release -ldflags \"-X 'main.buildDateTime=$(date '+%Y-%m-%d %H:%M:%S')' -X 'main.gitCommitCode=$(git rev-list --full-history --all --abbrev-commit --max-count 1)' -s -w\" -o easydarwin","build:dev": "go build -o EasyDarwin.exe","dev": "go build -o EasyDarwin.exe","dev:lin": "go build -o easydarwin","dev:www": "cd web_src && npm run start","clean": "rimraf EasyDarwin.exe EasyDarwin.exe~ easydarwin"},
我理解这段其实就是编译要执行的脚本,修改其中和linux有关的编译项——修改其中的go build为GOOS=linux GOARCH=arm GOARM=7 go build即可,这样就是用ARM版的go编译器去编译,修改后的脚本如下:
"scripts": {"build:ico": "rsrc -arch amd64 -ico ed.ico -o EasyDarwin_windows.syso","build:www": "cd web_src && npm run build && cd .. && apidoc -i routers -o www/apidoc","build:doc": "apidoc -i routers -o www/apidoc","build:win": "go build -tags release -ldflags \"-s -w\" -o EasyDarwin.exe","build:lin": "GOOS=linux GOARCH=arm GOARM=7 go build -tags release -ldflags \"-X 'main.buildDateTime=$(date '+%Y-%m-%d %H:%M:%S')' -X 'main.gitCommitCode=$(git rev-list --full-history --all --abbrev-commit --max-count 1)' -s -w\" -o easydarwin","build:dev": "go build -o EasyDarwin.exe","dev": "go build -o EasyDarwin.exe","dev:lin": "GOOS=linux GOARCH=arm GOARM=7 go build -o easydarwin","dev:www": "cd web_src && npm run start","clean": "rimraf EasyDarwin.exe EasyDarwin.exe~ easydarwin"},
修改完成后,继续交叉编译:
npm run build:lin
接下来交叉编译的过程中,会报一个溢出错误,百度发现有人遇到过这个问题,解决方案如下:
# 修改routers/record.go 106行
把math.MaxUint32改为math.MaxInt32
修改完毕后再次编译即可。
编译完成之后,把生成的可执行文件放到板子上,直接运行即可;easydarwin有个后台管理的网页服务,如果也想访问嵌入式设备上的这个服务的话把EasyDarwin目录下的www文件夹放到和板子的可执行文件同一个目录上即可。
验证推流拉流的方法在下载页面有介绍,这里就不重复了。
如果编译后发现生成的可执行程序依然在编译环境下能够执行,而非在ARM下执行,需要检查环境变量是否正常配置。
后记
本来没打算写这个总结的,后来想想自己整天在别人的帮助下解决问题,提供一下自己的解决问题的方式回馈大家,才是应该做的事情。
就酱。
哦对了,第一篇技术博客,第一次用markdown写东西,希望以后能熟练一点
EasyDarwin的交叉编译相关推荐
- 嵌入式linux下的FFmpeg交叉编译(最全面)
FFmpeg介绍 当下直播应用很火,在音视频领域,FFmpeg相当知名.可能你用的一些视频播放器背后都有它的身影.FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音视频流.转码.封装.解封装 ...
- Golang的交叉编译问题
参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM交叉编译和远程RPC
TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...
- 用TensorRT针对AArch64用户的交叉编译示例
用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...
- Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)
1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...
- linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...
内核的配置: General setup ---> Kernel compression mode (LZMA) --->LZMA [*] Networking support -- ...
- Cmake 交叉编译
转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/ CMake交叉编译 CMake的使用,以及如何将一个项目移植到A ...
- Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...
- Ubuntu上通过android toolchain交叉编译Valgrind操作步骤
关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过 ...
最新文章
- 4.65FTP服务4.66测试登录FTP
- linux中sh基本语法
- ITK:使用FFT的归一化相关
- 内部导线拉力测试_端子拉脱力的正确测试方法及标准
- python自动生成表格_Python自动整理 Excel 表格
- [原]那些年整理的Linux常用命令,简单明了
- ICCV 2019 中国论文数量超美国,商汤57篇论文入选!
- 艾瑞咨询:即时通讯面临多种安全威胁
- button按钮onclick触发不了_用一篇深度好文,详解按钮的设计
- 支持向量机原理小结(3)——核方法和非线性支持向量机
- gcc编译C++ 符号名解码 c++filt demangle
- 二进制算法问题解析——1000瓶药水,1瓶有毒药,几只小白鼠能够找出?
- 使用TMT工具进行威胁分析及风险评估(TARA)
- Unity3d之AR小游戏
- 无线充电设计(二)-方案设计
- JAVA初学者必备的基础书籍
- Python爬虫之scrapy框架-爬取小说信息
- BBS论坛详细功能列表
- 2022-2028中国干墙砂光机市场现状研究分析与发展前景预测报告
- python练习题:输入账号密码
热门文章
- 北大核心2020_“三个月不录用视为拒稿”,核心期刊投稿,编辑的这句话别有用意...
- 硬件芯片----74HC595芯片的运用原理
- 火狐浏览器书签工具栏固定书签宽度
- 1032. 字符流(每日一难phase2--days28)
- 854. 相似度为 K 的字符串(每日一难phase2--day20)
- 使用google service定位服务
- 网页游戏开发基础——网页基础知识
- 硬笔行书字帖3500常用字_2018年【成年人实用硬笔行书】一对一直播培训简介
- csol永恒python属性_狗神弑神参上!CSOL缔造者新添Lua功能脚本
- WordPress优化攻略:全面提升WP网站速度仅需3个加速方法和1个插件