Błąd krytyczny GCC: stdio.h: Nie ma takiego pliku lub katalogu

90

Próbuję skompilować program w C na OS X 10.9 z GCC 4.9 (eksperymentalnie). Z jakiegoś powodu w czasie kompilacji pojawia się następujący błąd:

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

Następnie wypróbowałem prosty program Hello World:

#include <stdio.h>

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

Ponownie podczas uruchamiania gcc -o ~/hello ~/hello.cwystąpił ten sam błąd. Używam eksperymentalnej wersji programu gcc, ale wydaje się nieprawdopodobne, aby istniało wydanie, które generowało błędy podczas importowania stdio. Co może powodować ten problem i jak można go naprawić?

Jules
źródło
11
Możesz zobaczyć, gdzie gcc szuka plików nagłówkowych, wykonując echo "#include <bogus.h>" | gcc -v -x c -i badając ścieżki wyszukiwania.
Christian Ternus,
1
Bardzo przydatne polecenie! Wygląda na to, że nie stdio.hznajduje się na żadnej ze ścieżek wyszukiwania GCC.
Jules
2
Mavericks nie ma już bazy / usr / include. Musisz go połączyć z XCode OS 10.9 SDK.
Yann Ramin
3
BTW, int mainpierwszym parametrem jest int, a nie int * argc.
p0lAris
3
@ user2615799 Jego adressudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include /usr/include
Yann Ramin

Odpowiedzi:

141

Mac OS X

Miałem też ten problem (napotkany przez kompilatory Macports). Poprzednie wersje Xcode pozwalały na instalowanie narzędzi wiersza poleceń za pośrednictwem xcode / Preferences, ale xcode5 nie daje opcji narzędzi wiersza poleceń w GUI, więc założyłem, że zostało to automatycznie włączone. Spróbuj uruchomić to polecenie:

xcode-select --install

Ubuntu

(zgodnie z tą odpowiedzią )

sudo apt-get install libc6-dev

Alpine Linux

(zgodnie z tym komentarzem )

apk add libc-dev
amos
źródło
Jeśli używasz Xcode 6 beta 5, to polecenie może się nie powieść. W takim przypadku musisz to zrobić sudo xcode-select -s /Applications/Xcode.app. Kiedy skończysz, przełącz się z powrotem, używając sudo xcode-select -s /Applications/Xcode6-Beta5.app.
Sjors Provoost
1
Łał. Nadal pracuję z Xcode 8.0 i Sierra w 2017 r.
user124384
1
Przewodnik Alpine jest niezwykle przydatny dla obrazów
Dockera
jakieś sugestie dla użytkowników systemu Windows? Mam ten problem w
systemie
1
Dla użytkowników macOS, którzy nadal mają problemy po zainstalowaniu CLT stackoverflow.com/questions/63342521/ ...
anki
46

Mac OS Mojave

Zaakceptowana odpowiedź już nie działa. Po uruchomieniu polecenia xcode-select --installinformuje o użyciu „Aktualizacji oprogramowania” do zainstalowania aktualizacji.

W tym linku jest zaktualizowana metoda:

Otwórz terminal, a następnie:

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

Otworzy się kreator instalacji.

Aktualizacja 12/2019

Po aktualizacji do Mojave 10.15.1 wydaje się, że używanie xcode-select --installdziała zgodnie z przeznaczeniem.

Samshel
źródło
Ponowna instalacja nagłówków działa również podczas aktualizacji do Xcode 10.2.
Bojan Dimovski
Kiedy otwieram macOS_SDK_headers_for_macOS_10.14.pkg, otrzymuję przerażające ostrzeżenie od instalatora: „Ten pakiet jest niekompatybilny z tą wersją macOS i może się nie powieść”. Mam Mojave.
Steve Siegel
@SteveSiegel Jakiej wersji Mac OS używasz? Zaktualizowałem do 10.15.1 i nie musiałem już wykonywać tego obejścia. Zaktualizowałem moją odpowiedź, aby to odzwierciedlić.
Samshel
„Aktualizacja do Mojave 10.15.1” to nieprawda. @SteveSiegel Pakiet jest przestarzały. Należy użyć SDKROOT. stackoverflow.com/a/63343829/10063119
anki
23

Użytkownicy ubuntu:

sudo apt-get install libc6-dev

specjalnie dla programistów ruby, którzy mają problem z instalacją gem install json -v '1.8.2'na swoich maszynach wirtualnych

odpowiednik 8
źródło
1
Ciekawy. Dzięki. Ta biblioteka rozwiązuje również kilka innych problemów. Niedawno spotkałem się z tym, próbując uruchomić test porównawczy dla petabyet.com (który używa gcc).
dhaupin
14
Na alpejskim Linuksie potrzebowałemapk add libc-dev
shadi
3

Miałem ten sam problem. Zainstalowałem „XCode: narzędzia programistyczne” ze sklepu z aplikacjami i rozwiązałem problem.

Myślę, że ten link pomoże: https://itunes.apple.com/us/app/xcode/id497799835?mt=12&ls=1

Podziękowania dla Yanna Ramina za jego rady. Myślę, że istnieje lepsze rozwiązanie z linkami, ale było to łatwe i szybkie.

Powodzenia!

nevieandphil
źródło
Czy masz na myśli zwykły Xcode? A może jest jakaś specjalna wersja o nazwie „XCode: narzędzia programistyczne”? Ponieważ widzę tylko normalny Xcode w App Store. To prawda, to 4 lata w przyszłość od opublikowania tej odpowiedzi.
user124384
1

Wiem, że mój przypadek jest rzadki, ale nadal dodam go tutaj dla kogoś, kto rozwiąże go później. Miałem docelowy moduł jądra Linuksa w moim Makefile i próbowałem skompilować mój program przestrzeni użytkownika razem z modułem jądra, który nie ma stdio. Uczynienie go osobnym celem rozwiązało problem.

Soid
źródło