首页 > 其他分享 >【解决了一个小问题】macbook m2 下交叉编译 musl-gcc 支持的 gozstd 库

【解决了一个小问题】macbook m2 下交叉编译 musl-gcc 支持的 gozstd 库

时间:2023-06-09 20:11:08浏览次数:46  
标签:gcc x86 .. musl gozstd 64 linux

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


我的 golang 项目中使用了 gozstd, 在 macbook m2 下编译当然没有问题。
可是当交叉编译 linux amd64 的二进制时,遇到了问题。

使用 gnu-gcc 是 ok 的

env CC=x86_64-linux-gnu-gcc CGO_ENABLED=1  GOOS=linux  GOARCH=amd64 CGO_LDFLAGS="-static" \
	  go build -o cmd/server_linux_amd cmd/main.go

使用 musl-gcc 报错

env CC=x86_64-linux-musl-gcc CGO_ENABLED=1  GOOS=linux  GOARCH=amd64 CGO_LDFLAGS="-static" \
	  go build -o cmd/server_linux_amd cmd/main.go

出现类似这样的错误:

/opt/homebrew/Cellar/go/1.20.4/libexec/pkg/tool/darwin_arm64/link: running x86_64-linux-musl-gcc failed: exit status 1
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/fuchunzhang/go/pkg/mod/github.com/valyala/[email protected]/libzstd_linux_amd64.a(zdict.o): in function `ZDICT_analyzeEntropy':
zdict.c:(.text+0x7d4): undefined reference to `__fprintf_chk'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: zdict.c:(.text+0xd21): undefined reference to `__fprintf_chk'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/fuchunzhang/go/pkg/mod/github.com/valyala/[email protected]/libzstd_linux_amd64.a(zdict.o): in function `ZDICT_analyzePos':
zdict.c:(.text+0x1922): undefined reference to `__fprintf_chk'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: zdict.c:(.text+0x19b2): undefined reference to `__fprintf_chk'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/fuchunzhang/go/pkg/mod/github.com/valyala/[email protected]/libzstd_linux_amd64.a(zdict.o): in function `ZDICT_finalizeDictionary':
zdict.c:(.text+0x1cf3): undefined reference to `__fprintf_chk'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/fuchunzhang/go/pkg/mod/github.com/valyala/[email protected]/libzstd_linux_amd64.a(zdict.o):zdict.c:(.text+0x20b5): more undefined references to `__fprintf_chk' follow
collect2: error: ld returned 1 exit status

解决办法

最后搜索到作者的 github,帖子里介绍了解决办法:https://github.com/valyala/gozstd/issues/20
最终用这样的命令行解决了:

env CC=x86_64-linux-musl-gcc CGO_ENABLED=1  GOOS=linux  GOARCH=amd64 CGO_LDFLAGS="-static" \
	  go build -tags 'musl' -o cmd/server_linux_amd cmd/main.go

标签:gcc,x86,..,musl,gozstd,64,linux
From: https://www.cnblogs.com/ahfuzhang/p/17470156.html

相关文章

  • 浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑
    原创文章,转载请注明出处:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119562 版本迭代是嵌入式开发永久的痛,这么多年不知道浪费了多少时间在版本迭代上。部分系统组件还好点,有个LTS长期支持版,而厂家SDK和IDE环境可谓惨不忍睹,一代版本一代坑。视频版:https://www.b......
  • 菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序
    step1:下载安装Dev-C++已经安装了Dev-C++或系统中的可以跳过这步。去官网下载Dev-C++。我昨天下载,发现有点慢,所以我把安装文件放到百度网盘了,供大家下载,下载链接为:http://pan.baidu.com/s/1pLPenDx。开始安装,记住安装位置。在安装时只能选择英文,安装完成后,第一次启动时可以选择......
  • 编译安装 gcc 4.9并验证使用
    编译安装gcc4.9并验证使用1.准备环境(GCC编译器)centOS6.3cat/proc/version Linuxversion2.6.32-279.el6.x86_64([email protected])(gccversion4.4.620120305(RedHat4.4.6-4)(GCC))#1SMPFriJun2212:19:21UTC2012gcc--vers......
  • CentOS 6.9 python3.10 numpy 安装使用 - gcc 升级
    踩坑记录程序写好了,使用了pandas,放在服务器上,运行报错:Originalerrorwas:/lib64/libgcc_s.so.1:version`GCC_4.8.0'notfound(requiredby/usr/local/lib/python3.10/site-packages/numpy/core/../../numpy.libs/libgfortran-040039e1.so.5.0.0)可以看到是导入numpy......
  • GCC常用工具及其命令行
       ......
  • gcc编译器犯病怎么回事?求大佬看看
    犯病前:犯病后:源码:1#include<stdio.h>2main(){3//printf("欢迎使用电子通讯录\n");4FILE*fp=fopen("naph.txt","r");5charbuf[11];6inti,j,k,n,n2=0,n3=0,i2;7while(fgets(buf,1024,fp)){n++;}8......
  • C语言gcc编译环境搭建
     第一步,根据以下链接下载gcc工具包;gcc工具包下载地址:链接:https://pan.baidu.com/s/1JqEjakTcWLPv7p6zkah6sA提取码:k4d2第二步,将下载好的工具包解压到本地;第三步,找到gcc工具包目录下的bin文件夹所在的目录,将该路径添加到系统的环境变量中; 第四步,打开CMD,输入gcc,,验证......
  • 【解决一个小问题】macbook m2 上交叉编译 gozstd
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯已知zstd是一个优秀的压缩库,gozstd封装了这个库。一开始在macbookm2芯片的笔记本上开发包含了gozstd的程序时,一切正常。发布的时候,需要分别编译linux+arm64......
  • suse linux通过iso文件安装gcc
     mount-tiso9660-oloopSLES-11-SP4-DVD-x86_64-GM-DVD1.iso/media/#仅仅上述iso1即可不需要mountiso2mount-tiso9660-oloopSLES-11-SP4-DVD-x86_64-GM-DVD2.iso/media/DN1:~/bone#zypperar/media/suse11sp4iso正在添加安装源'suse11sp4iso'[完毕]成功......
  • Suse 12 安装gcc 11
    由于suse12默认不自带gcc镜像源,需要自行安装,首先添加gcc镜像源zypperar-fhttp://download.opensuse.org/repositories/devel:/gcc/SLE-12/devel:gcc使用zypperref命令刷新安装源(由于制作镜像时未删除cdrom源,会提示该源无法使用。是否使用该源选no)使用zypperlr查看gcc源......