M1 Macbook中UTM虚拟机Ubuntu 20.04.4环境下编译代码报错求助
解决M1 Mac UTM中Ubuntu ARM64编译时的
-m64参数错误 你的问题核心是架构不匹配——M1属于ARM64(aarch64)架构,UTM里安装的Ubuntu 20.04.4默认也是ARM64版本,而-m64是x86_64(Intel/AMD)平台专属的编译参数,ARM版的g++自然无法识别它。下面分步骤帮你解决:
第一步:确认虚拟机架构
先在Ubuntu终端运行这条命令,验证系统架构:
uname -m
如果输出是aarch64,就说明你的Ubuntu确实是ARM64版本,这也解释了-m64参数报错的原因。
第二步:解决-m64参数错误的两种方案
方案1:修改Makefile(推荐,适合大多数课程作业场景)
ARM64系统下,g++默认编译的就是64位程序,完全不需要-m64这个多余参数。你只需要:
- 打开作业提供的Makefile,找到包含
-m64的行(通常在CXXFLAGS或CFLAGS变量定义中)。 - 删除
-m64参数,保存文件。 - 重新运行
make命令,应该就能正常编译出可执行文件了。
方案2:用交叉编译工具生成x86_64程序(如果课程强制要求x86架构输出)
如果教授明确需要x86_64架构的程序,你需要安装ARM64到x86_64的交叉编译工具链:
sudo apt-get install gcc-x86-64-linux-gnu g++-x86-64-linux-gnu
之后修改Makefile中的编译器:把g++替换为x86_64-linux-gnu-g++,同时保留-m64参数;或者直接用交叉编译器手动编译:
x86_64-linux-gnu-g++ 你的源文件.cpp -m64 -o 输出程序名
补充:关于第一个g++: Command not found错误
你通过sudo apt-get install build-essential解决这个问题的操作非常正确——这个包会安装g++、gcc、make等基础开发工具,是Ubuntu上编译C/C++程序的必备依赖。
内容的提问来源于stack exchange,提问作者Kwaxx00
相关产品推荐
相关产品推荐

