asm / errno.h: Keine solche Datei oder kein solches Verzeichnis

8

Ich versuche gerade, gcc 4.8.1 zu installieren. Derzeit sind 4.8.2 und 4.9.1 installiert. Ich habe eine 4.8.1 von hier heruntergeladen: http://gcc.cybermirror.org/releases/gcc-4.8.1/ . Nachdem ich die Dateien extrahiert hatte, machte ich eine ./configureund versuchte es dann make. Am Ende makebekomme ich diesen Fehler

/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
 #include <asm/errno.h>

Ich bin neu in Linux, daher weiß ich nicht, wie ich diese Header-Datei finden oder hinzufügen kann.

Edit: Schritte, die ich gemacht habe:

  1. Extrahieren Sie gcc-4.8.1.tar.gz in einen Ordner
  2. Terminalfenster öffnen
  3. cd gcc-4.8.1
  4. ./configure --build=x86_64-linux-gnu
  5. make -j4

Ich weiß nicht, was ich anders gemacht habe, aber es wurde schließlich kompiliert. Danach habe ich installiert. Meine Frage jetzt, wie ich dies anstelle von 4.8.2 verwende, die mit dem Befehl gcc-4.8 immer noch standardmäßig verwendet wird.

Meenor
quelle
Bitte sag mir, dass du es nicht getan hast sudo make install. Es wird dringend empfohlen, beim Erstellen von Inhalten aus dem Quellcode während der Konfiguration das --prefixFlag (und mit GCC das --program-suffixFlag) zu verwenden. Versuchen Sie es, da Sie es nicht getan haben /usr/bin/gcc.
Muru
@muru Vielen Dank für Ihre Hilfe! Ich habe es jetzt geschafft, 4.8.1 zu verwenden. Ich wusste nicht, dass ich zuerst 4.8.2 löschen musste. Außerdem habe ich sudo make install verwendet. Gibt es einen Grund, dies nicht zu tun?
Meenor
Nun, Sie haben GCC konfiguriert, ohne ein Suffix anzugeben. Während dies /usr/bin/gccnormalerweise vom Ubuntu-Paketsystem verwaltet werden sollte, wurde es jetzt von dem von Ihnen kompilierten überschrieben.
Muru

Antworten:

5

Der asm/errno.hHeader wird von einer Vielzahl von Paketen bereitgestellt . Seltsam, dass gcces erforderlich wäre, aber Sie können versuchen:

sudo apt-get install linux-libc-dev

Sie müssen GCC außerdem anweisen, nach einer Architektur und einem betriebssystemspezifischen Speicherort für die Header zu suchen:

../configure --build=x86_64-linux-gnu 

(oder i386-linux-gnufür 32-Bit-Ubuntu).


Es wird dringend empfohlen, beim Erstellen von Inhalten aus dem Quellcode während der Konfiguration das --prefixFlag (und mit GCC das --program-suffixFlag) zu verwenden. Versuchen Sie es, da Sie es nicht getan haben /usr/bin/gcc.

Somit:

tar xf gcc-4.8.1.tar.gz 
mkdir gcc
cd gcc
../gcc-4.8.1/configure  --build=x86_64-linux-gnu --prefix=/usr/local --program-suffix=-4.8.1
make -j
sudo make install

Jetzt werden Ihre GCC-Binärdateien installiert /usr/local/bin/und andere Dinge in anderen Ordnern in /usr/local.

Zum Beispiel:

$ /usr/local/bin/gcc-4.8.1  # or simply gcc-4.8.1, since this folder is in your PATH

Beachten Sie, wie ich ausgeführt werde configureund makeaus einem anderen Verzeichnis außerhalb der GCC-Quelle? So empfehlen die GCC-Dokumente , dass GCC erstellt wird.

muru
quelle
Hallo, ich habe gerade versucht, das zu installieren, aber es sagte, dass es bereits installiert war.
Meenor
Entschuldigung, ich bin mir nicht sicher, wie ich diese angeben soll. Können Sie mir ein Beispiel geben, wie ich das machen würde?
Meenor
Haben Sie Linux-Header installiert?
Chili555
muru, das habe ich versucht, aber ich bekomme immer noch den gleichen Fehler.
Meenor
@muru, ja ich habe make clean benutzt. Ich habe auch versucht, den Ordner zu löschen, die Dateien erneut zu extrahieren und die Schritte zu wiederholen. Kein Erfolg.
Meenor
5

Ich habe den gleichen Fehler bekommen ubuntu-xenial 4.4.0-75-generic.

Ich fand, ich hatte einen /usr/include/asm-genericOrdner, aber nein /usr/include/asm, den gcc suchte.

Das Erstellen eines Symlinks hat es für mich gelöst.

sudo ln -s /usr/include/asm-generic/ /usr/include/asm

Faire Warnung : Obwohl man manchmal solche Tricks machen muss, ist es nicht immer eine gute Idee, nur weil es funktioniert. Ich mache das in einer virtuellen Maschine, die ich durch Ausführen eines einfachen Skripts neu erstellen kann, und deshalb ist es keine große Sache, wenn ich etwas kaputt mache.

Nicolai S.
quelle