GCC编译时指定-march=haswell参数报错的解决方法咨询
GCC编译时指定-march=haswell参数报错的解决方法咨询
嗨,我来帮你捋清楚这个问题的根源和解决办法:
问题原因
你现在用的是ARM64架构的Ubuntu(Parallels Desktop在Mac上跑的ARM版系统,对应M系列芯片的ARM架构),而-march=haswell是针对Intel x86架构的CPU优化参数,ARM版本的GCC根本不认识这个x86的CPU型号,所以直接报错了。从错误提示里的有效参数列表(armv8-a、armv8.1-a等)也能看出来,当前GCC是为ARM架构编译的。
解决办法
根据你的需求,有几个不同的处理方向:
需求1:针对当前ARM CPU做优化(最常用)
直接用-march=native参数代替haswell,GCC会自动检测你当前ARM CPU的架构特性并启用对应的优化,命令改成:gcc -Wall -Wpedantic -std=c17 -march=native -c array_sum.S -o array_sum.o需求2:手动指定ARM架构版本
从错误提示给出的有效参数里选一个适合的,比如大部分M1/M2芯片支持armv8-a,命令可以改成:gcc -Wall -Wpedantic -std=c17 -march=armv8-a -c array_sum.S -o array_sum.o如果你的CPU支持更高版本(比如M2支持armv8.5-a),也可以选对应的参数。
需求3:你其实是想编译x86架构的程序
那需要安装x86交叉编译工具链,先执行安装命令:sudo apt install gcc-x86-64-linux-gnu然后用交叉编译工具链的gcc来编译,这时候就能用
-march=haswell参数了:x86_64-linux-gnu-gcc -Wall -Wpedantic -std=c17 -march=haswell -c array_sum.S -o array_sum.o注意:这样编译出来的是x86程序,在ARM系统上运行需要依赖QEMU之类的模拟器。
备注:内容来源于stack exchange,提问作者677k
相关产品推荐
相关产品推荐

