g++: as 无法确定要使用哪个汇编器 运行

g++: as fails to determine which assembler to run

今天我想重新编译我的一个项目。编译这个项目已经在我的机器上运行了,但是这次出现了错误。

编译器输出为:

fatal error: as: unknown host architecture (can't determine which assembler to run)`

对于行:

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../../.vscode -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../../.vscode -I. -o Main.o ../../Main.cpp

我尝试编译其他一些项目,但意识到我无法使用任何 c++ 编译器编译任何东西,所以我查了一下。

我找到的唯一合适的线程是 this one,但解决方案 'reinstalling binutils' 对我不起作用(尝试了 sudo apt-get install --reinstall binutils 以及 --reinstall gccg++build-essential)

我想到这个问题的一个可能原因是我昨天安装的 iOS-toolchain - 我不得不安装一些不同的 clang 版本 - 但实际上我没有改变系统汇编器上的任何东西...

如果有人有想法;任何帮助将不胜感激:)


附加信息:

Ubuntu 16.04 LTS 64 位

AMD FX(tm)-6300 六核处理器 × 6


uname -m

returns x86_64


 gcc -march=native -v -E - 2>&1 <<<'' | grep "cc1" | egrep -o -e $'-m(arch|tune)=[^ "\']+'

returns -march=bdver2-mtune=bdver2


已经尝试 gcc [...] -march bdver2 和其他架构


g++ -v -c HelloWorld.cpp 给我:http://pastebin.com/Ks2be0hL


type -a as 说:

as is /usr/local/bin/as
as is /usr/bin/as

as --version 可悲的是再次向我展示错误,但 info as 告诉我它是 binutils-2.26.1-system 来自 2016-08-07


dpkg -S /usr/bin/as 打印:binutils: /usr/bin/as

删除 binutils 并按照以下步骤重新安装:

创建一个安装目录/opt/cross,并确保您有对.

的写权限
sudo mkdir -p /opt/cross
sudo chown user /opt/cross
export PATH=/opt/cross/bin:$PATH

下载并安装

wget http://mirrors.muzzy.it/gnu/binutils/binutils-2.9.tar.gz
tar xvf binutils-2.9.tar.gz
cd binutils-2.9
linux32 ./configure --prefix=/opt/cross --target=aarch64-linux --disable-multilib

如果不起作用删除 --target=aarch64-linux--disable-multilib 选项意味着我们只希望我们的 Binutils 安装与使用 aarch64 指令集的程序和库一起工作,而不是任何相关指令集比如 aarch32, 运行:

linux32 ./configure --prefix=/opt/cross --disable-multilib
linux32 make
linux32 make install

type -a as 表示 as/usr/local/bin/as。这就是 gcc 运行,而不是 /usr/bin/as,因为 /usr/local/bin/as 在您的 $PATH 搜索顺序中首先找到。这就是为什么重新安装软件包等无效的原因:您安装的其他东西(可能是手动安装的)安装了非标准 as.

看看 /usr/local/bin/as 并弄清楚它来自哪里,以及如何处理它。现在您可以将其重命名为 as.unknown 或其他名称,然后一切都将使用正常的系统汇编器 (/usr/bin/as).