2017-03-18 16 views
2

함께 제공된 MINGW와 함께 Code :: Blocks v 16.1.0.0을 사용하고 있습니다. 링커에 문제가 있습니다. #include "sth"을 사용하여 단일 헤더/소스 파일을 소스 파일에 연결할 수 없습니다. 문제를 좁히려면 프로젝트에 1 개의 소스와 1 개의 헤더 파일 만 있지만, 내가 사용하는 파일과 옵션을 사용해도이 오류를 무시할 수는 없습니다. Code :: Blocks 오류 : ld가 1 종료 상태를 반환했습니다.

이는 툴체인 디렉토리입니다 빌드 로그

-------------- Build: Debug in MISC (compiler: GNU GCC Compiler)--------------- 

gcc.exe -Wall -Wextra -Wall -g -std=c99 -c C:\Users\username\Documents\CodeBlocks\C\MISC\readFileByChars.c -o obj\Debug\readFileByChars.o 
g++.exe -LC:\Users\username\Documents\CodeBlocks\C\MISC -o bin\Debug\MISC.exe obj\Debug\readFileByChars.o readFileByChars.h.gch 
readFileByChars.h.gch: file not recognized: File format not recognized 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

입니다 :

enter image description here

내가 실행중인 프로그램의 이전 인스턴스가 없습니다. 또한 MINGW 독립 실행 형 (환경 변수에 bin 폴더를 포함하지 않고 빌드 중에 codeblocks를 혼동하지 않음), codeblocks에는 설치와 함께 제공되는 미리 패키지 된 패키지가 포함됩니다. 프로젝트에서 헤더 파일을 링크하는 옵션을 클릭하면 프로젝트가 빌드되지 않습니다 (하지만 파일을 링크하지 않으면 어떻게 내 애플리케이션을 빌드 할 수 있습니까?). 이 프로젝트가 비어 반복, 난 단 하나의 헤더와 단 하나의 소스 파일이 포함되어 있습니다. 나는 이것에 관해서 다른 비슷한 질문을 보았지만 그들의 해결책은 효과가 없었다. 도움을 받으실 수 있습니다. 고맙습니다.

답변

3

There is a problem with the linker. I cannot link a single header/source file to a source file using #include "sth"

링커에 문제가 없습니다. 헤더 파일이나 소스 파일을 연결할 수 없습니다. 소스 파일 (#include 헤더 파일)을 컴파일하여 오브젝트 파일을 생성 할 수 있습니다. 당신이 #include이 개념을 지원하는 컴파일러, 주제 컴파일러 특정하는 제한의 사용에 위한 precompiled header file, 될 수

헤더 파일 (및 이름에도 불구하고, 미리 컴파일 된 헤더 파일은을 컴파일되지 이다 : 그것은 오브젝트 파일이 이 아님).

링커는 개체 파일과 동적 라이브러리 만 링크하여 실행 파일을 생성 할 수 있습니다. 오브젝트 파일을 직접 사용하거나 정적 라이브러리에서 추출 할 수 있습니다.

귀하의 실패 연계 명령을

g++.exe -LC:\Users\username\Documents\CodeBlocks\C\MISC -o bin\Debug\MISC.exe obj\Debug\readFileByChars.o readFileByChars.h.gch 

는 미리 컴파일 된 헤더 readFileByChars.h.gch를 연결하려고 시도하는 것을 보여줍니다. 링커는 말한다 :

readFileByChars.h.gch: file not recognized: File format not recognized 

미리 컴파일 된 헤더가 오브젝트 파일이나 정적 또는 동적 라이브러리가 아니기 때문에. 그것은 링커가 이해할 수있는 것이 아닙니다.

더 이상 readFileByChars.h.gch 을 링커 입력으로 전달하지 않도록 프로젝트 옵션을 수정하십시오.

아마도 special steps 을 통해 Code :: Blocks 프로젝트에 미리 컴파일 된 헤더 readFileByChars.h.gch을 생성했을 것입니다. 해당 문서를 제대로 읽었 으면 설명서에 언급되지 않은 내용이 필요합니다. 다른 프로젝트 옵션은 미리 컴파일 된 헤더에 대해 컴파일러 또는 링커에 에 대해 알릴 필요가 없습니다.

미리 컴파일 된 헤더를 사용할 필요가 없습니다. 앞에서 설명한 것처럼 올바른 사용법은 정확하지 않으며 컴파일러에 따라 다릅니다. 은 미리 컴파일 된 헤더없이 없이 평범한 방식으로이 프로젝트와 다른 프로젝트를 빌드 할 것을 제안합니다.이 경우 컴파일 시간이 길어질 수 있습니다 ( 미리 컴파일 된 헤더가 유용하게 축소 될 수 있음).

+0

계몽 대답. 나는 어떻게 일이 잘되는지 알았지 만, 그렇지는 않았다. 따라서 (미리 컴파일 된 헤더가없는) 성공적인 빌드에서는 컴파일을 클릭하거나 헤더 파일을 링크하지 않아도됩니다. 나는 단지'.c' 또는'.cpp' 소스 파일을 컴파일하고 링크해야한다. –