2013-03-14 3 views
0

.c 파일의 시작 부분에 여러 개의 .h 파일이 있습니다.gcc에서 컴파일하는 동안 오브젝트 파일에 오류가 발생했습니다.

gcc -Wall -c parserv9-3.c 

에 오류 또는 경고가 없습니다 :

나는 -c 플래그를 사용하여 .c 파일을 컴파일합니다.

그러나 -c 플래그를 제거하면 임시 오브젝트 파일에 오류가 발생합니다.

즉, 내가 실행할 때 다음과 같은 오류 얻을

gcc -Wall parserv9-3.c 

:

/tmp/cc5IWBiC.o: In function `parseInputSourceCode': 
parserv9-3.c:(.text+0x204b): undefined reference to `getStream' 
collect2: error: ld returned 1 exit status 

문제가 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

-c 플래그는 링크가 아니라 컴파일만을 의미합니다. 제거 할 때 - gcc는 객체를 실행 파일에 연결하고 (대신 ld 명령을 호출), 참조 된 모든 외부 심볼을 ​​찾아야합니다.

귀하의 경우, getStream 기호가 없습니다. 아마도 다른 .c 파일에있을 것입니다.

+0

예,'getStream' 함수는 다른 .c 파일에 있지만 현재 .c 파일에 포함 된 .h 파일 중 하나에서 선언됩니다. 그래서이 코드에 전체 코드를 복사하지 않고 같은 기능을 어떻게 사용합니까? – user42933

+0

** 링크 ** - 모든 개체를 연결해야합니다. 컴파일러는 실제 구현이 어디에 있는지 신경 쓰지 않지만 링커는 신경 쓰지 않습니다. "gcc file1.c file2.c -o exec"를 수행하면 file2에서 file1로 구현 된 함수를 호출 할 수 있으며 링크됩니다. 그러나 당신은 그들을 함께 연결해야합니다 ** **. 그렇지 않으면 컴파일 할 수 있고 o/so/a/lib/dll/무엇이든 만들 수 있지만 결국 실제 구현과 링크되어야합니다. – littleadv

+0

감사합니다. – user42933

관련 문제