美文网首页
在M1环境中交叉编译有CGO 的 linux 可执行文件

在M1环境中交叉编译有CGO 的 linux 可执行文件

作者: Newzer | 来源:发表于2022-08-21 09:25 被阅读0次

项目背景:confluent-kafka-go 客户端 接入项目,
https://github.com/confluentinc/confluent-kafka-go/blob/master/README.md
根据这个文档说的,macOS 可以直接编译生成 linux 运行的可执行文件,
执行:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
可是会报

image.png

后来发现 librdkafka 是基于C的,所以需要开启CGO_ENABLED
执行:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
还是会报:


image.png

经过搜索发现,os本身系统库不兼容的问题,需要安装linux的编译环境

执行:brew install FiloSottile/musl-cross/musl-cross
安装完成以后执行:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
还是不行:需要指定环境变量
执行:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build
报了一大堆看不懂的错误,然后又花了很久时间去查,没有结果。。。


image.png

最终我又回到官方文档,


image.png

虽然刚开始是macOS,但是现在我刚刚就是搭建了musl libc这个编译环境,
所以执行:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build -tags musl
终于成功了

把可执行文件上传到服务器去执行,报:
No such file or directory

我以为我的文件名写错了,以为我的命令写错了,以为.....
最后又回到这里


image.png

安装环境:
wget https://copr.fedorainfracloud.org/coprs/ngompa/musl-libc/repo/epel-7/ngompa-musl-libc-epel-7.repo -O /etc/yum.repos.d/ngompa-musl-libc-epel-7.repo
yum install -y musl-libc-static

在服务器上安装环境之后,终于成功启动了

但其实我差不多花了一天的时间才解决掉这个问题

继续下一个问题。。。。

相关文章

网友评论

      本文标题:在M1环境中交叉编译有CGO 的 linux 可执行文件

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