g ++:因为无法确定要运行哪个汇编程序

时间:2016-08-10 17:12:21

标签: c++ linux assembly g++ binutils

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

编译器输出:

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,但解决方案'重新安装binutils'对我不起作用(尝试sudo apt-get install --reinstall binutils以及--reinstall gccg++build-essential

我想到的这个问题的一个可能原因是我昨天安装的iOS工具链 - 我必须安装一些不同的clang版本 - 但实际上我没有改变系统的汇编程序......

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

其他信息:

Ubuntu 16.04 LTS 64bit

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

uname -m

返回x86_64

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

返回-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告诉我2016年7月7日的binutils-2.26.1-system

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

2 个答案:

答案 0 :(得分:1)

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

查看/usr/local/bin/as并找出它的来源,以及如何处理它。现在你可以将它重命名为as.unknown或其他东西,然后一切都将使用普通的系统汇编程序(/usr/bin/as)。

答案 1 :(得分:0)

删除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

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

linux32 ./configure --prefix=/opt/cross --disable-multilib
linux32 make
linux32 make install
相关问题