C 프로그래밍 언어에 대한 초보자 질문이 있습니다. 나는 비슷한 질문에 답을 찾기 위해 주변을 둘러 보았지만 그것을 이해하지는 못했습니다.다른 디렉토리의 소스 파일에서 메소드 호출
src와 test라는 두 개의 디렉토리로 구성된 간단한 프로젝트로 가정하십시오. 소스 및 헤더 파일은 src/main.c, test/foo.h 및 test/foo.c에 의해 정의됩니다.
SRC/main.c의 :
#include "../test/foo.h"
int main (void) {
int a = VAR; /* works, recognizes declared macro */
some_function(a); /* doesn't work, "undefined reference" */
}
시험/foo.h : (중복하지만 완전하기)
#ifndef FOO_H
#define FOO_H
void some_function(int a);
#define VAR 2;
#endif
시험/foo.c를 :
#include "foo.h"
#include <stdlib.h>
void some_function(int a) {
printf("%d", ++a);
}
이클립스에서 프로젝트를 만들었고 매크로도 함께 컴파일했다. 매크로가 인식되기 때문에 링크 오류가 아니라는 것을 알았지 만 호출 가능하지 않다. .
다른 디렉토리를 사용하는 이유는 파일이 많아서 내 테스트 코드가 내 주요 소스 코드와 분리되기 때문입니다. src와 test는 동일한 상위 디렉토리를가집니다.
여기에 어떤 아이디어가 있습니까? 나는 아주 명백한 것을 놓치고 있습니까?
도움이 될 것입니다, 미리 감사드립니다!
편집 : 저는 (Debian) 리눅스 컴퓨터에서 일하고 있고 이클립스는 gcc 컴파일러를 사용하고 있습니다.
edit2 : H2CO3의 답변 덕분에 실제로 링크 오류입니다. 수동으로 컴파일하고 링크 할 때마다 오버 헤드가 커지기 때문에 다른 디렉토리의 실행 파일을 링크하도록 Eclipse를 가르치는 방법을 알고 있는지 궁금합니다.
--------------------- 해결책 ---------------------
edit3 : 솔루션은 결국 매우 쉽습니다. "새로운 폴더"보다는 "새로운 소스 폴더"를 만드는 것이 었습니다. 나는 어리 석을 느낀다.하지만 특히 H2CO3에 답해 주신 모든 분께 감사드립니다!
'main.c' =>'#include "../test/foo.c의 실제 소스 파일을 포함 시키십시오. " – Cyclonecode
@KristerAndersson *** NO NO NO NO NOOOOOOO *** –
@ H2CO3 - 작동하지 않겠습니까? – Cyclonecode