g ++: as не может определить, какой ассемблер запустить

Сегодня я хотел перекомпилировать один из моих проектов. Компиляция этого проекта уже работала на моей машине, но на этот раз произошла ошибка.

Вывод компилятора идет:

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 ++, поэтому я посмотрел его.

Единственная подходящая нить, которую я нашел, была этот но решение «переустановка binutils» у меня не сработало (пробовал sudo apt-get install --reinstall binutils так же как --reinstall gcc, g++ а также build-essential)

Одна возможная причина этой проблемы, которая приходит мне в голову, это iOS-toolchain, который я установил вчера — мне пришлось установить несколько разных версий clang — но на самом деле я ничего не менял в ассемблере системы …

Если у кого-то есть идея; любая помощь будет оценена 🙂


Дополнительная информация:

Ubuntu 16.04 LTS 64bit

AMD FX ™ -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 говорит мне, что это binutils-2.26.1-system с 2016-08-07


dpkg -S /usr/bin/as печатает: binutils: /usr/bin/as

1

Решение

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).

1

Другие решения

Удалить 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
0