Сегодня я хотел перекомпилировать один из моих проектов. Компиляция этого проекта уже работала на моей машине, но на этот раз произошла ошибка.
Вывод компилятора идет:
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
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
).
Удалить 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