C 표준 라이브러리 헤더용 Eclipse CDT의 "해결되지 않은 포함" 오류
일식을 위해 CDT를 설치하고 간단한 hello world C 프로그램을 작성했습니다.
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
프로그램은 올바르게 빌드되어 실행되지만, 이클립스는 다음과 같은 포함문 옆에 노란색 물음표를 계속 표시합니다."Unresolved inclusion: <stdio.h>"
그 위에 마우스를 올려놓으면요.
프로그램 실행에는 영향을 주지 않지만, 저는 오히려 귀찮습니다.
어떻게 제거하는지 아는 사람 있나요?
나는 이 대답들(인정된 것을 포함)이 다소 수수께끼 같은 것을 알았다.
저는 stdio에 경로를 추가해야 했습니다.h는 (@ardnew가 말한 바와 같이) 위치해 있습니다.Eclipse에서 프로젝트의 속성을 열고 "C/C++ 일반"을 확장한 다음 "경로 및 기호"를 선택합니다.
를 추가했는지 확인합니다.include
사용하는 언어별로 dir를 지정합니다.(저 같은 경우는 GNU C++에 추가만 하면 됩니다.
이클립스가 사용하고 있는 컴파일러는 심볼을 잘 해결할 수 있기 때문에 코드는 잘 컴파일 됩니다.
그러나 Eclipse가 사용하고 있는 코드 완성/인덱서 또는 프리프로세서는 어디에 있는지 알 수 없습니다.stdio.h
존재한다.
파일 시스템 경로를 지정해야 합니다.stdio.h
가 설치되어 있습니다.
Eclipse 문서에서는 컴파일러의 몇 가지 섹션에 대해 설명합니다.
코드완료/인덱서 또는 프리프로세서도 특정할 수 없는 경우stdio.h
:
의 정확한 위치stdio.h
코드를 작성하려는 시스템에 따라 달라집니다.Eclipse를 실행하고 있는 시스템과 같은 시스템의 코드를 작성하는 경우 표준 위치는 다음과 같습니다./usr/include/stdio.h
Linux, MacOS, Cygwin 등의 경우
개별/리모트 타겟 시스템(예를 들어 Android, Rasberry Pi, STM32)을 크로스 컴파일하는 경우 해당 시스템에 설치한 SDK 어딘가에 있습니다.특정 SDK 문서를 참조할 필요가 있습니다.
톱 앤서즈 노트에서는 빌드 폴더의 위치를 지정해야 합니다.이 폴더는 프로젝트를 우클릭하여 [Properties]-> [ C / C + + General ]-> [ Paths and Symbols ]를 선택하면 대화상자를 통해 추가할 수 있습니다.
남은 문제는 어떤 경로를 추가해야 하느냐입니다.
명령줄 액세스용으로 gcc가 올바르게 설정되어 있고, 사용하는 기본 경로 포함을 알고 싶은 경우, 원하는 언어에 따라 다음 명령을 사용하십시오.
gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null
...이 명령어는 gcc를 호출할 때 사용되는 기본 컴파일러 설정을 나열합니다(이 명령어는 "gcc"가 실제로 clang의 에일리어스인 경우에도 동작합니다(OSX에서도 마찬가지).
/dev/null
빈 파일로 사용됩니다.빈 파일을 해석하도록 gcc에 지시합니다.
-x <language>
언어를 지정하는 확장자를 가진 파일을 사용하지 않기 때문에 컴파일할 언어를 지정합니다.
-v
상세 출력(include paths 출력 포함)
-E
전처리만 수행하고 전처리된 파일을 출력합니다(이것에 의해, 빈 파일이 올바르게 컴파일 되지 않는다고 gcc가 불평하는 것을 방지합니다).
아래쪽에는 포함 디렉토리의 목록이 표시됩니다.
#include "..." search starts here:
#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.
여기에 나열된 디렉터리를 나열된 순서대로 Eclipse의 경로 및 기호 대화 상자에 입력하면 Eclipse CDT가 표준 헤더와 OS에 고유한 일부 추가 헤더를 찾을 수 있습니다.
(관련 질문에 대한 devnull의 답변에 감사드립니다.)
- [파일] 을 선택합니다.>
- Project Wizard에서 [C/C++]> [ C++ Project ]를 선택합니다.
- [프로젝트 종류]섹션에서 [파일 프로젝트 만들기]> [ Hello world C++ 프로젝트]를 선택합니다.
- "툴 체인" 섹션에서 "Linux GCC"를 선택합니다.
문제 해결이 가능합니다.(영어가 서툴러 죄송합니다)
[ Project ]> [ Properties ]> [ C / C + + General ]> [ Preprocessor Includes ]> [ Providers ]순서대로 선택하여 다음 중 하나를 선택합니다.
- "CDT GCC 내장 컴파일러 설정"
- "CDT CROSS GCC 내장 컴파일러 설정"
각 항목에 대해 "프로젝트 간에 공유되는 글로벌 공급자 사용" 하위 항목도 선택합니다.
Ubuntu 16.04의 Eclipse 4.8.0에서 C 및 C++ hello world를 사용하여 테스트.
저는 여러 개의 크로스 컴파일러 구성을 사용하고 있으며, 여기서 STD 헤더 파일(및 기타 환경 변수)에 서로 다른 위치를 사용해야 합니다.
해결책은 인덱서가 활성 구성을 사용하도록 설정하는 것이었습니다.
안타깝게도 일부 일식 버그로 인해 옵션이 로컬에 저장되지 않으므로 일식을 다시 열 때 구성을 저장하려면 작업 공간 구성을 사용해야 합니다.
창 -> 설정 -> C/C++ -> 인덱서 -> 활성 빌드 구성 사용
이것에 의해, 이클립스는 프로젝트의 액티브한 크로스 GCC 설정으로 설정되어 있는 올바른 컴파일러를 사용할 수 있게 됩니다.
지식 베이스에 추가해서 win7에서 sygwin을 사용하여 이 작업을 수행했습니다.
이게 나한테 효과가 있는 것 같아.
c에 대한 경로 포함:
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include
c++ 경로 포함:
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include
헬로월드의 깔끔한 컴파일을 얻을 수 있어요
일반적으로 Eclipse는 표준 포함 파일을 자동으로 해결할 수 있습니다.이를 위해서는 gcc를 호출하여 설정을 요구합니다.Eclipse가 gcc(또는 컴파일에 사용하는 버전)를 찾지 못할 가능성이 높습니다.
프로젝트 설정에서 모든 표준 포함 경로를 지정하는 대신 Eclipse가 gcc를 찾도록 해야 할 수 있습니다.Eclipse를 시작하기 전에 gcc가 발견된 디렉토리를 PATH 환경 변수에 추가하십시오.
다른 프로젝트에서 다른 컴파일러를 사용하려면 검색 옵션을 조정할 수 있습니다.기본적으로는 숨겨져 있기 때문에 먼저 [Window]> [ Preferences ]> [ C / C + + ]> [ Property Pages Settings ]> [ Display " Discovery Options " ]페이지에서 활성화 합니다.그런 다음 프로젝트 속성의 [C/C++ Build]> [ Discovery Options ]에서 찾을 수 있습니다.
임베디드 프로젝트에서 이클립스 기반의 CodeWarrior IDE를 사용하고 있으며, 이 문제는 소스 주소를 삭제하고 프로젝트 속성 -> C/C++ General -> Path 및 Sybols -> Include Directorys에 다시 추가하는 것으로 해결되었습니다.즉, "해결되지 않은 포함:" 메시지를 받아들여야 할 이유가 많고 해결책도 많습니다.
Cygwin과 이클립스를 사용하고 있는데, 이게 효과가 있었어요.
[ Project ]> [ Properties ]> [ C / C + + General ]> [ Preprocessor Includes ... ]순서대로 진행합니다.> [ CDT GCC Built - in Compiler Settings Cygwin [ Shared ](CDT GCC 빌트인 컴파일러 설정 Cygwin [ 공유])을 선택합니다.
ADT에서 다음을 수행했습니다.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
- [ C / C + + General ]를 전개하여 [Preprocessor Include Paths, Macros ]를 선택합니다.
- CDT 사용자 설정 항목 선택
- 추가...를 선택합니다.오른쪽 메뉴부터
- Add Include Directory에서 파일 시스템 경로로 프로젝트 경로 변경
- include 파일이 들어 있는 디렉토리를 참조합니다.
- 필요에 따라 저어 반복하다
경로와 기호를 설정할 때 발생한 오류는 처음에 다른 언어의 포함 경로를 설정했다는 것입니다.CDT와 Cygwin gnu C++를 사용하고 있습니다.따라서 GNU C++ 언어로 기호와 경로를 설정해야 합니다.
또한 설정${COMMAND}
로.gcc
Linux 상에서
아래:
- 프로젝트.
- 특성.
- C/C++ 일반
- 프리프로세서에는 패스, 매크로 등이 포함됩니다.
- 프로바이더
- CDT GCC 내장 컴파일러 설정
- 컴파일러 사양을 가져오는 명령어
대체:
${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"
포함:
gcc -std=c99 -E -P -v -dD "${INPUTS}"
이렇게 하지 않으면 Eclipse stdout에 다음과 같이 표시됩니다.
Unable to find full path for "-E"
로그인을 합니다.${HOME}/eclipse-workspace/.metadata/.log
표시:
!ENTRY org.eclipse.cdt.core 4 0 2020-04-23 20:17:07.288
!MESSAGE Error: Cannot run program "-E": Unknown reason
왜냐면${COMMAND} ${FLAGS}
그래서 이클립스는 이클립스를 실행하려고 합니다.-E
그 다음입니다.
우리가 제대로 정의할 수 있을지 의문입니다.COMMAND
그리고.FLAGS
변수를 빌드 변수로 추가하려고 했지만 작동하지 않았습니다.
질문의 C++ 버전:Eclipse CDT에서 C++ 파일의 "미해결 포함: <iostream>"을 해결하는 방법
Eclipse 2020-03(4.15.0), Ubuntu 19.10 및 이 최소 Makefile 프로젝트에서 기존 소스를 사용하여 테스트했습니다.
명령줄을 통해 컴파일되는지 확인하시겠습니까?Linux에 대한 도움말은 libc-dev를 설치하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/9337757/unresolved-inclusion-error-with-eclipse-cdt-for-c-standard-library-headers
'programing' 카테고리의 다른 글
1개의 패스로 여러 개의 키가 입력되어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
---|---|
어떻게 하면 현재 시간을 알 수 있나요? (0) | 2022.09.17 |
브라우저가 파일 다운로드를 수신할 때 감지 (0) | 2022.09.17 |
MySQL 연결을 끊는 방법 (0) | 2022.09.17 |
string.charAt(x) 또는 string[x]? (0) | 2022.09.17 |