2015-02-06 18 views
8

Wiem, że Mac OS X to system oparty na systemie Unix. I słyszałem, że standardowa biblioteka C, taka jak stdio.h, znajduje się w /usr/local/include lub /usr/include. Ale w tym katalogu nie ma żadnej biblioteki. Używam Terminala do przeszukiwania tego katalogu i używam również polecenia, takiego jak find ./ -iname "stdio.h", ale nic nie wychodzi. Jednak, o dziwo, działa polecenie gcc -test.c -o test. Jak to się stało? Chcę wiedzieć, gdzie znajduje się moja biblioteka C. p.s Używam również Xcode. Czy jest to związane z tą aplikacją? Pomóż mi! Mam też serwer linuksowy AWS EC2, i ma obie biblioteki, które skazałem powyżej.Gdzie jest mój "stdio.h" na Macu?

+2

'Plik nagłówkowy' 'jest częścią standardowej biblioteki C i może znajdować się w katalogu * any *, który kompilator szuka plików nagłówkowych, może to być w podkatalogu do'/usr/lib' na przykład . Ponadto polecenie 'find ./ -iname" stdio.h "' wyszukuje plik z katalogu * current *, więc jeśli jesteś w domenie. twój własny katalog domowy, którego nie znajdziesz. –

Odpowiedz

17

Jeśli posiadasz Xcode, ale nie zainstalowałeś opcjonalnego pakietu narzędzi wiersza poleceń, to standard obejmuje i biblioteki mogą nie zostać znalezione w zwykłym miejscu. Spróbuj:

$ find /Applications/Xcode.app -name stdio.h 

i prawdopodobnie zobaczysz coś takiego:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1/tr1/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sys/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/c++/4.2.1/tr1/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/sys/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/tr1/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/tr1/stdio.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/stdio.h 

Jednak warto do zainstalować narzędzia pakietu Command Line jeśli planujesz robić żadnych non-Xcode (tj komenda linia) programowanie. Zobaczysz wtedy zwykłe nagłówki i biblioteki w /usr/include i /usr/lib.

+0

Dzięki. Ale po zainstalowaniu narzędzi wiersza poleceń, tylko/usr/include ma plik biblioteki. nie ma "/ usr/local/include" !! co oznacza, że ​​gdy wpisuję "cd/usr/local/include", pojawia się błąd: Brak takiego pliku lub katalogu. czy to jest w porządku ?? – user3595632

+0

@ user3595632 To dobrze, '/ usr/local' jest tradycyjnie używane przez dodatkowe pakiety SDK i pakiety, a nie przez dostawcę platformy. – Potatoswatter

+0

To prawda -/usr/local służy do instalowania materiałów innych firm, aby nie zostały nadpisane podczas aktualizacji systemu. System przechodzi w/usr. –

2

W moim laptopie pojawia się w wielu miejscach, takich jak /usr/include/stdio.h i /usr/include/sys/stdio.h i /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdio.h.

0

W folderze

Applications/Xcode/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include 

lub podobnego.

5

tworzyć/aktualizować dowiązania dla /usr/include mieć wykryte libs:

sudo ln -sf /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include /usr/include 

Powyższa ścieżka można znaleźć wyszukując stdio.h

find /Applications/Xcode.app -path '*/usr/include/stdio.h' 

muszę zrobić to przy każdej aktualizacji XKode/MacOS SDK, w obliczu tego dzisiaj z aktualizacją XCode 7.

Po zainstalowaniu narzędzi wiersza polecenia nie można ich ponownie zainstalować przy użyciu xcode-select, więc ścieżka może nie zostać zaktualizowana przy aktualizacji do Mac AppStore.

Odinstalowanie & Ponowna instalacja XCode, a następnie uruchomienie xcode-select --install może zaktualizować ścieżkę, ale jest przesadą.

Niektóre posty wspominają także o xcode-select --switch /Application/Xcode.app, ale nie miałem z tym szczęścia.

16

Jeśli nie masz zainstalowane narzędzia wiersza poleceń można uruchomić:

xcode-select --install 

otwiera się okno dialogowe, aby zaakceptować umowę licencyjną i tak dalej.

(Tego nie było w powyższych odpowiedziach.)

+0

To najkrótsza odpowiedź! –

1

Jeśli już zbudowałeś zlokalizować bazy danych, można użyć

locate stdio.h 

Jeśli nie już budować. Komenda locateis awesome!