Schwerwiegender GCC-Fehler: stdio.h: Keine solche Datei oder kein solches Verzeichnis


89

Ich versuche, ein Programm in C unter OS X 10.9 mit GCC 4.9 (experimentell) zu kompilieren. Aus irgendeinem Grund wird beim Kompilieren der folgende Fehler angezeigt:

gcc: fatal error: stdio.h: No such file or directory

Ich habe dann ein einfaches Hello World-Programm ausprobiert:

#include <stdio.h>

int main(int argc, const char *argv[])
{
    printf("Hello, world!");
    return 0;
}

Beim Laufen gcc -o ~/hello ~/hello.cbekam ich wieder den gleichen Fehler. Ich verwende eine experimentelle Version von gcc, aber es scheint unplausibel, dass es eine Version geben würde, die beim Import Fehler erzeugt stdio. Was könnte dieses Problem verursachen und wie kann es behoben werden?


10
Sie können sehen, wo gcc nach Header-Dateien sucht, echo "#include <bogus.h>" | gcc -v -x c -indem Sie die Suchpfade ausführen und untersuchen.
Christian Ternus

1
Sehr nützlicher Befehl! Es sieht nicht so aus, als ob stdio.hes sich in einem der Suchpfade von GCC befindet.
Jules

2
Mavericks hat keine Basis / usr / include mehr. Sie müssen es über das XCode OS 10.9 SDK verknüpfen.
Yann Ramin

3
Übrigens ist int mainder erste Parameter ein int und nicht int * argc.
p0lAris

3
@ user2615799 Es ist beisudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include /usr/include
Yann Ramin

Antworten:


138

Mac OS X

Ich hatte auch dieses Problem (durch Macports-Compiler angetroffen). In früheren Versionen von Xcode konnten Sie Befehlszeilentools über xcode / Preferences installieren, aber xcode5 bietet keine Option für Befehlszeilentools in der GUI, sodass ich davon ausgegangen bin, dass sie jetzt automatisch enthalten ist. Versuchen Sie, diesen Befehl auszuführen:

xcode-select --install

Ubuntu

(gemäß dieser Antwort )

sudo apt-get install libc6-dev

Alpines Linux

(gemäß diesem Kommentar )

apk add libc-dev

Wenn Sie Xcode 6 Beta 5 verwenden, schlägt dieser Befehl möglicherweise fehl. In diesem Fall müssen Sie tun sudo xcode-select -s /Applications/Xcode.app. Wenn Sie fertig sind, wechseln Sie zurück mit sudo xcode-select -s /Applications/Xcode6-Beta5.app.
Sjors Provoost

1
Beeindruckend.
Arbeitet

1
Der alpine Guide ist äußerst nützlich für Docker-Bilder, die auf der alpinen Distribution basieren. Er funktioniert wie gewünscht
VanDavv

Irgendwelche Vorschläge für Windows-Benutzer? Ich habe dieses Problem unter Windows
Ratul Hasan

46

Mac OS Mojave

Die akzeptierte Antwort funktioniert nicht mehr. Wenn Sie den Befehl xcode-select --installausführen, werden Sie aufgefordert, "Software-Update" zum Installieren von Updates zu verwenden.

In diesem Link befindet sich die aktualisierte Methode:

Öffnen Sie ein Terminal und dann:

cd /Library/Developer/CommandLineTools/Packages/
open macOS_SDK_headers_for_macOS_10.14.pkg

Dadurch wird ein Installationsassistent geöffnet.

Update 12/2019

Nach dem Update auf Mojave 10.15.1 scheint die Verwendung xcode-select --installwie beabsichtigt zu funktionieren.


Die Neuinstallation der Header funktioniert auch beim Upgrade auf Xcode 10.2.
Bojan Dimovski

Wenn ich macOS_SDK_headers_for_macOS_10.14.pkg öffne, wird vom Installationsprogramm eine beängstigende Warnung angezeigt: "Dieses Paket ist mit dieser Version von macOS nicht kompatibel und kann möglicherweise nicht installiert werden." Ich habe Mojave.
Steve Siegel

@SteveSiegel Welche Mac OS-Version verwenden Sie? Ich habe ein Upgrade auf 10.15.1 durchgeführt und musste diese Problemumgehung nicht mehr durchführen. Meine Antwort wurde aktualisiert, um dies widerzuspiegeln.
Samshel

"Aktualisierung auf Mojave 10.15.1" ist falsch. @SteveSiegel Das Paket ist veraltet. SDKROOT sollte verwendet werden. stackoverflow.com/a/63343829/10063119
anki

22

Ubuntu-Benutzer:

sudo apt-get install libc6-dev

Besonders Ruby-Entwickler, die Probleme bei der Installation gem install json -v '1.8.2'auf ihren VMs haben


1
Interessant. Vielen Dank. Diese Bibliothek löst auch einige andere Probleme. Vor kurzem habe ich versucht, einen Benchmark für petabyet.com (der gcc verwendet) auszuführen.
Dhaupin

14
Unter alpinem Linux brauchte ichapk add libc-dev
Shadi

3

Ich hatte das gleiche Problem. Ich habe "XCode: Entwicklungstools" aus dem App Store installiert und das Problem für mich behoben.

Ich denke, dieser Link wird helfen: https://itunes.apple.com/us/app/xcode/id497799835?mt=12&ls=1

Dank an Yann Ramin für seinen Rat. Ich denke, es gibt eine bessere Lösung mit Links, aber das war einfach und schnell.

Viel Glück!


Beziehen Sie sich nur auf normalen Xcode? Oder gibt es eine spezielle Version namens "XCode: Entwicklungstools"? Weil ich nur normalen Xcode im App Store sehe. Zugegeben, dies ist 4 Jahre in der Zukunft, nachdem diese Antwort veröffentlicht wurde.
user124384

1

Ich weiß, dass mein Fall selten ist, aber ich werde ihn hier noch für jemanden hinzufügen, der ihn später behebt. Ich hatte ein Linux-Kernel-Modulziel in meinem Makefile und habe versucht, mein User-Space-Programm zusammen mit dem Kernel-Modul zu kompilieren, das kein stdio hat. Es zu einem separaten Ziel zu machen, löste das Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.