유닉스 시스템에서 gcc는 헤더 파일을 어디에서 찾습니까?
오늘 아침에 약간의 시스템 헤더 파일을 찾기 위해 시간을 보냈으므로 여기에 유용한 정보라고 생각했습니다.
답변
`gcc -print-prog-name=cc1plus` -v
이 명령은 gcc에게 사용중인 C ++ 전처리기를 요청한 다음 포함 할 전처리기를 묻습니다.
특정 설정에 대한 신뢰할 수있는 답변을 얻을 수 있습니다.
마찬가지로 C 전 처리기의 경우 :
`gcc -print-prog-name=cpp` -v
답변
또한 gcc는 -I
옵션 뒤에 지정된 디렉토리를 찾습니다 .
답변
가짜 시스템 헤더를 포함시키려는 파일을 작성할 수 있습니다. 이러한 소스에서 상세 모드로 gcc를 실행하면 가짜 헤더를 찾을 때 모든 시스템 포함 위치가 나열됩니다.
$ echo "#include <bogus.h>" > 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
답변
GCC 매뉴얼 의 CPP 섹션 은 헤더 파일이 다음 디렉토리에있을 수 있음을 나타냅니다.
GCC는 여러 곳에서 헤더를 찾습니다. 일반적인 유닉스 시스템에서는 달리 지시하지 않으면 #include에서 다음과 같이 요청 된 헤더를 찾습니다.
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
C ++ 프로그램의 경우 먼저 / usr / include / g ++-v3을 살펴 봅니다.
답변
GCC가 시스템 헤더를 찾을 디렉토리의 전체 세트를 인쇄하게하려면 다음과 같이 호출하십시오.
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
양식의 출력을 생성합니다
#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.
-I
명령 행에 -family 옵션 이 있으면 출력되는 내용에 영향을줍니다.
(이 sed
명령은 이 호출이 인쇄 하는 다른 모든 정크를 제거 LC_ALL=C
하고 sed
명령이 작동 하는지 확인하는 것입니다 . “여기에서 시작”및 “검색 목록 끝”문구 가 IIRC 로 번역됩니다.
답변
g++ -print-search-dirs
gcc -print-search-dirs
답변
컴파일러가 헤더 파일을 찾는 경로 세트는 다음 명령으로 확인할 수 있습니다.
cpp -v
#include “” 를 선언하면 하면 컴파일러는 먼저 소스 파일의 현재 디렉토리를 검색하고 찾지 못한 경우 위의 검색된 디렉토리에서 계속 검색합니다.
#include <> 를 선언하면 하면 컴파일러는 위 명령에서 얻은 디렉토리에서 직접 검색합니다.
출처 : -http : //commandlinefanatic.com/cgi-bin/showarticle.cgi ? article=art026