g++: as 无法确定运行哪个汇编程序

Posted

技术标签:

【中文标题】g++: as 无法确定运行哪个汇编程序【英文标题】:g++: as fails to determine which assembler to run 【发布时间】:2016-08-10 17:12:20 【问题描述】:

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

编译器输出如下:

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 64 位

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 [...] -marchbdver2 和其他架构


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-08-07 的 binutils-2.26.1-system


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

【问题讨论】:

尝试使用g++ -v -c hello.cpp查看***g++驱动程序运行的子命令。 感谢您的快速回复,我会试试看 :) (rhime) 澄清一下:您是否尝试过编译一个简单的 Hello World 可执行文件? 是的,现在才这样做,但又出现同样的错误:/ int main() return 0; @PeterCordes 这是g++ -v -c HelloWorld.cpp 输出:pastebin.com/Ks2be0hL 【参考方案1】:

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

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

【讨论】:

啊,我明白了。谢谢,我试试看:) 太好了,现在可以编译 HelloWorld.cpp。 :) 但是对于我测试过的两个 QT 应用程序,现在出现了一个新错误。我会编辑它。 @Leso_KN:如果是不同的错误,那就是不同的问题,您应该单独发布,而不是更改问题并使此答案无效。 哦,好的!那么:关闭:) 还是找到了解决方案;我能够用同样的技巧解决它(which ld 给了我一个结果,但我还是把它重命名了 - 好像有 另一个 ld,这就是我首先感到困惑的原因)。但再次感谢大家,线程关闭:)【参考方案2】:

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

【讨论】:

感谢您的回复!我已经想到了,但只是为了确保:你真的想让我apt-get purge binutils?因为它看起来像this... 这真的不是开玩笑的意思,我只是不确定我是否应该这样做:/(还要注意结尾处的ubuntu-desktop*..) 在没有purge 的情况下运行apt-get removepurge 将删除所有依赖项

以上是关于g++: as 无法确定运行哪个汇编程序的主要内容,如果未能解决你的问题,请参考以下文章

确定我的 Node.js 应用程序当前在哪个 AWS Beanstalk 环境中运行的最佳实践是啥?

as无法在vivo上安装程序解决

VScode配置C++出现无法识别g++问题怎么办?

如何确定当前应用在 LibGDX 中运行在哪个平台上?

“无法确定要运行哪个“make”命令。检查构建配置中的“make”步骤。” Qt 创建者

无法运行程序“g++”:启动失败 - Eclipse C++