Gdzie gcc szuka plików nagłówkowych C i C++?
W systemie Unix, gdzie gcc szuka plików nagłówkowych?
Spędziłem trochę czasu dziś rano szukając plików nagłówkowych systemu, więc pomyślałem, że to będzie dobra informacja, aby mieć tutaj.
9 answers
`gcc -print-prog-name=cc1plus` -v
To polecenie pyta gcc, którego preprocesora używa C++, a następnie pyta tego preprocesora, gdzie szuka includes.
Otrzymasz wiarygodną odpowiedź na konkretną konfigurację.
Podobnie, dla C preprocesora:
`gcc -print-prog-name=cc1` -v
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 20:01:42
Dodatkowo, gcc będzie szukać w katalogach podanych Po opcji -I
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 21:01:28
Możesz utworzyć plik, który próbuje dołączyć fałszywy nagłówek systemowy. Jeśli uruchomisz gcc w trybie szczegółowym na takim źródle, wyświetli on listę wszystkich lokalizacji systemu, które szukają fałszywego nagłówka.
$ echo "#include <bogus.h> int main(){}" > t.c; gcc -v t.c; rm t.c
[..]
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
[..]
t.c:1:32: error: bogus.h: No such file or directory
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-10 17:44:51
Sekcja CPP podręcznika GCC wskazuje, że pliki nagłówkowe mogą znajdować się w następujących katalogach:
GCC szuka nagłówków w kilku różnych miejscach. W normalnym systemie uniksowym, jeśli nie poinstruujesz go inaczej, będzie szukał nagłówków wymaganych z #include in:
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
Dla programów C++, będzie również wyglądać w /usr/include/g++-v3, najpierw.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-05 16:03:23
g++ -print-search-dirs
gcc -print-search-dirs
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 14:29:59
Aby zmusić GCC do wydrukowania całego zestawu katalogów, w których będzie szukał nagłówków systemowych, wywołaj to w następujący sposób:
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
Który wykona wyjście formularza
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Jeśli masz opcje rodziny -I
w wierszu poleceń, będą one miały wpływ na to, co zostanie wydrukowane.
(sed
Komenda ma na celu pozbycie się wszystkich innych śmieci, które wyświetla wywołanie, a LC_ALL=C
ma na celu upewnienie się, że komenda sed
działa -- "starts here" I " End of search list" frazy są tłumaczone IIRC.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 19:48:10
Zestaw ścieżek, na których kompilator szuka plików nagłówkowych, można sprawdzić za pomocą polecenia: -
cpp-v
Jeśli zadeklarujesz #include "" , kompilator najpierw wyszukuje w bieżącym katalogu pliku źródłowego, a jeśli nie zostanie znaleziony, kontynuuje wyszukiwanie w powyższych odzyskanych katalogach.
Jeśli zadeklarujesz #include , kompilator wyszukuje bezpośrednio w tych katalogach uzyskanych z powyższego dowództwo.
Źródło: - http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 13:18:27
Można wyświetlić (dodatkową) ścieżkę dołączania dla programu C z Basha, sprawdzając:
echo $C_INCLUDE_PATH
Jeśli jest pusta, może być zmodyfikowana, aby dodać domyślne lokalizacje include, przez:
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 23:28:20
Są to katalogi, które gcc szuka domyślnie dla określonych plików nagłówkowych (biorąc pod uwagę, że pliki nagłówkowe są zawarte w szewronach ); 1. /usr / local/ include / -- używany dla plików nagłówkowych innych firm. 2. /usr / include / -- używany dla plików nagłówkowych systemu.
Jeśli zdecydujesz się umieścić swój niestandardowy plik nagłówka w innym miejscu niż wyżej wymienione katalogi, możesz dołączyć je w następujący sposób: 1. korzystanie z cudzysłowów ("./ custom_header_files / foo.h") ze ścieżką plików, zamiast szewronów w oświadczeniu include. 2. użycie przełącznika-I podczas kompilacji kodu. gcc-i / home/user/ custom_headers / - c foo.c-P foo.o Zasadniczo przełącznik-I mówi kompilatorowi, aby najpierw zajrzał do katalogu podanego przełącznikiem-I (zanim sprawdzi standardowe katalogi).Podczas przełączania-I pliki nagłówkowe mogą być dołączane za pomocą szewronów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-09 08:02:38