交叉编译踩坑

之前接触过GO,交叉编译简直好用。这次机缘巧合,有一个应用场景,需要把服务放到端上,立马想到了用GO写一个服务,编译到端上运行。


然后踩坑就开始了。

开始是编译后的文件执行不了,返回一堆err。百度之后发现是gcc的问题,需要在交叉编译的命令中加上CC参数。

那么CC参数的值填什么呢,就是需要用到的gcc编译器。于是去确定系统架构

unman -a

应该就是aarch64吧,于是下载对应的gcc,各种难下载,最后找到一个。

编译命令:

CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=/Volumes/aarch64/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc go build

编译后的文件可以用。但是又有新坑。

import一些包之后,会出现 /bin/sh xxx not found,不知道为什么,后来把import的包一个一个过滤,发现是github.com/prometheus/procfs 这个包,又一个文件一个文件过滤,发现proc相关的文件没有问题,于是改造了一波,解决问题。

然后需要搭建一个http服务,引入了net/http,又崩了。这次彻底怒了,去看看究竟是什么原因。后来怀疑是端上缺少一些必要的的.so

于是./aarch64-unknown-linux-gnu-readelf -d xxx

看一波.so

发现其中一个奇怪的东东



但是端上不一样


于是怀疑是这个的问题

然后发现了根本原因,gcc选错了,不是aarch64,是gnueabihf,也就是ld-linux-armhf.so.3对应的gcc。

阿西吧。

你可能感兴趣的:(交叉编译踩坑)