小菜鸟不知道如何表述题目。好绕...
依然是荣耀立方,可玩性很高的一个东西,可惜被荣耀放弃了。前文书说把立方兄root了,可以用root 用户SSH登陆。这篇是接着的
最近用golang写了一个采集器,可以通过tcp采集温湿度之类的传感器信息。不过是在电脑上用的。考虑到能耗问题(其实就是穷)就想放到立方上运行。
废话完了。介绍环境 用的win开发 +LiteIde(感谢国人大佬)。go 1.11.6 数据库 sqlite 大概这样
因为之前 从win移植到 linux 因为sqlite需要cgo的支持,交叉编译出了问题,所以在wls2 上的debian 也装了go 用来编译 linux下的版本(就为了躲交叉编译的问题,最后还是没躲过去 /大哭)
参照网络设置交叉编译环境
//安装需要的文件
apt-get install gcc-arm-linux-gnueabihf apt-get install g++-arm-linux-gnueabihf //下面是设置编译环境 export GOARCH=arm //定义CPU架构 export CGO_ENABLED=1 //设置cgo支持 export CC=arm-linux-gnueabihf-gcc //指定gcc编译器 export CXX=arm-linux-gnueabihf-g++ //指定g++编译器 go build //开始编译
ps:虽然能编译出来,但是不能运行,提示找不到文件。头疼....
以上命令感谢 https://blog.csdn.net/dengjin20104042056/article/details/53561654
经过排查应该是 指定的 arm-linux-gnueabihf-gcc , arm-linux-gnueabihf-c++ 有问题。
参照网络说明 https://www.cnblogs.com/xiaotlili/p/3306100.html
半懂不懂的琢磨换个编译器,试着 搜了一下 gcc-arm-linux 结果还真有一个 gcc-arm-linux-gnueabi
root@DESKTOP:/mnt/d/# apt-cache search gcc-arm-linux gcc-arm-linux-gnueabi - GNU C compiler for the armel architecture gcc-arm-linux-gnueabihf - GNU C compiler for the armhf architecture
那还等啥,直接装。
export CC=arm-linux-gnueabi-gcc
export CXX=arm-linux-gnueabi-g++
上面的环境变量该一下。 然后愉快的开始 build
然而现实又给了我一锤子
/lib/libc.so.6: version `GLIBC_2.28' not found
编译环境的GLIBC比立方使用的glibc版本高。跑不起来!! 哎,按照人家提示改吧,琢磨指定glibc版本。
我一个小菜鸟那搞的顶这种问题,都想装一个Gentoo去下面编译了(gentoo多版本支持简直太香了,就是装起来好麻烦)。
忽然看到有个提示,既然外链glibc不行,那直接静态编译,把需要支持的东西都编译到程序里就行了啊。(不好意思,太激动不记得是在什么网页上看到了。谢谢匿名侠)
说是因为go 本来就是静态编译的,但是因为要支持cgo所以,外链了支持库。
参照了下面三位大佬的文章
https://www.cnblogs.com/embedded-linux/p/11616048.html https://johng.cn/cgo-enabled-affect-go-static-compile/ https://www.michaelapp.com/posts/2019/2019-02-12-cmake%E9%9D%99%E6%80%81%E7%BC%96%E8%AF%91%E5%92%8Cgolang%E9%9D%99%E6%80%81%E7%BC%96%E8%AF%91/
我总结一下啊
//编译时候敲这个命令先试试
go build -a -ldflags '-extldflags "-static"' .
//如果上面的不好用,就敲下面这个(尴尬,我就是这么洼的水平)
go build -a -ldflags '-linkmode "external" -extldflags "-static"'
在推荐一下 ,我相信认真看完会有收获的 https://johng.cn/cgo-enabled-affect-go-static-compile/