美文网首页
交叉编译踩坑

交叉编译踩坑

作者: soondh | 来源:发表于2020-06-30 14:37 被阅读0次

    之前接触过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。

    阿西吧。

    相关文章

      网友评论

          本文标题:交叉编译踩坑

          本文链接:https://www.haomeiwen.com/subject/kpkxqktx.html