首页 > 系统相关 >【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令的 c 代码

【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令的 c 代码

时间:2023-10-17 18:44:27浏览次数:41  
标签:macos x86 .. musl gcc 64 linux

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


一开始是使用 golang 中的 cgo 来编译:

env CC= c CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
CGO_CFLAGS="-mavx -mavx2 -mavx512f -mavx512vl -mavx512bw -O2" \
go build -tags 'musl' \
-ldflags="-w -s" \
-o bin/mysvr_linux_amd main.go

出现这样的错误信息:

# command-line-arguments
/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: /var/folders/gh/kjdg0t613bgdkppccm_f_hb80000gn/T/go-link-3887829862/000013.o: in function `caesarEncodeSIMD':
caesar_linux_amd64.cgo2.c:(.text+0xad): undefined reference to `_mm_storeu_epi8'
collect2: error: ld returned 1 exit status

但是,我在 m2 上下载一个 linux/amd64 的 gcc 容器来编译,又是完全正常的。

最终确定是 x86_64-linux-musl-gcc 的问题:

x86_64-linux-musl-gcc -o a1 a1.o -static

/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: a1.o: in function `caesarEncodeSIMD':
/Users/fuchunzhang/code/infowiz/system/golang/game-launcher/pkg/cryptoutil/caesar.c:26: undefined reference to `_mm_storeu_epi8'
collect2: error: ld returned 1 exit status

由此看来无法使用x86_64-linux-musl-gcc 来实现 macos m2 下交叉编译 linux/amd64 中含有 avx 指令的代码。
后面再试试别的交叉编译工具。

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

相关文章

  • C++ 获取文件信息(Linux)
    stat函数头文件:#include<sys/stat.h>intstat(constchar*restrictpathname,structstat*restrictbuf);第一个参数pathname:文件名,需要获取该文件的信息第二个参数buf:stat函数将pathname对应的文件信息,填入buf指向的stat结构中返回值:0成功;-1出错structstat{......
  • linux定时任务crontab的使用
    linuxcron是不到秒的。crontab参数列表-e#编辑定时任务-l#查看定时任务(其实没用,相当于cat)-r#删除定时任务-u#指定其他用户常用的是crontab-e;表示编辑定时任务。crontab-e和vim/etc/crontab的区别这两种都是编辑定时任务文件。crontab-e相当于cd/var/spool/cro......
  • 使用docker搭建drogon windows10,linux,mac下开发环境
    2023年10月13日14:52:26本机环境Windows10专业版22H2操作内核19045.2965如果直接在windows,linux,mac上直接搭建环境确实有一点难度,之前drogon官方并未提供官方镜像,现在有了docker镜像确实方便了,其实我是最近才有简述安装dockerdesktop,windows的虚拟化有2个方案hyper-v和w......
  • Linux基础——tmpfs挂载到root目录
    1、(卸载/tmp目录前,请备份/tmp目录下重要数据)查看/tmp目录的挂载情况df-h 卸载/tmp目录umount-lf/tmp 2、关闭tmp挂载及tmpfiles相关服务关闭自动挂载/tmp目录服务systemctldisabletmp.mountsystemctlstatustmp.mount 标记masktmp目录服务,禁止对服务操......
  • linux下自动删除文件夹,如何在Linux中自动删除或清理/tmp文件夹内容?
    https://blog.csdn.net/weixin_36315079/article/details/116614583?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169752720316800211589266%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=1697527203168002115892......
  • linux内核:伙伴算法、slab算法、ptmalloc、tcmalloc使用场景
    linux内核空间Linux内核空间分为三个区域ZONE:ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM物理地址空间的顶部以下一段空间,被PCI设备的I/O内存映射占据,它们的大小和布局由PCI规范所决定。640K~1M这段地址空间被BIOS和VGA适配器所占据由于这两段地址空间的存在,导致相应的RAM空间不......
  • Linux 搭建 ftp服务器
    ftp服务器的搭建:文件的上传,文件下载yum-yinstallvsftpd//安装ftpvim/etc/vsftpd/vsftpd.conf   //关闭匿名访问anonymous_enable=NO     //关闭匿名访问systemctlstartvsftpd.service//启动服务systemctlstatusvsftpd.service//查看服务状态如果......
  • linux 防火墙
    netstat是一个控制台命令,可用于监控本机的TCP/IP网络,获得路由表、网络连接以及所有网络接口设备的状态信息netstat-napt  查看监听的端口netstat-napt |grep5672  检查端口被那个进程占用ps6832查看进程的详细信息kill-96832终止进程常用的几个参数有:-a-n......
  • Linux中查看服务器内存/CPU/网络占用情况的命令
    目录1、查看物理CPU个数2、查看服务器CPU内核个数3、服务器内存使用情况4、查看服务器的平均负载5、查看系统整体性能情况6、查看系统已载入的相关模块7、查找PCI设置8、网络流量监控9、查看系统内核1、查看物理CPU个数cat cat/proc/cpuinfo|grep"physic......
  • linux安装mysql5.7
    wget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum-yinstallmysql57-community-release-el7-10.noarch.rpmyum-yinstallmysql-community-server--nogpgchecksystemctlstartmysqld.servicesystemctlstatusmysqld.servi......