2013-07-01 2 views
0

나는 다음과 같은 두 개의 프로젝트가 : 포함오류 : 우분투

`/home/jagbirs/Downloads/sample/SampleExtLib1` containing: 

ext_lib1.c 
ext_lib1.h 
Makefile 

/home/jagbirs/Downloads/sample/SampleMakeTest :

main.c 
Makefile 

내가 외부 라이브러리를 연결하는 방법을 배우고있다. 이 난은 main.c에서 사용

오전 ext_lib1.h의 함수이다하지만 난 한 후 다음과 같은 오류가 발생합니다 :

gcc -o main main.c -L/home/jagbirs/Downloads/sample/SampleExtLib1 -lext_lib1 
main.c:10:22: fatal error: ext_lib1.h: No such file or directory 
compilation terminated. 
make: *** [all] Error 1 

두 메이크 파일은 다음과 같이 SampleMakeTest/Makefile을 :

LIB = main 
SRC := main.c 
CFLAGS := -I../SampleExtLib1 

all: $(SRC) 
    gcc -o $(LIB) $(SRC) -L/home/jagbirs/Downloads/sample/SampleExtLib1 -lext_lib1 

clean: 
    rm -f *.o 

SampleExtLib1/메이크 :

all: ext_lib1.o 
    ar r libext_lib1.a ext_lib1.o 

clean: 
    rm -f *.o *.a 

수있는 몇 가지 행복 e 연결이 제대로 일어나지 않는 이유를 알아내는 데 도움이됩니까? 감사

답변

0

시도 라이브러리의 .h 파일을 포함하도록 -I를 추가 :이 노력하고 있지만 요점은 내가 아카이브를 만들 때 왜 나는 또한 헤더 파일을 포함하는 데 있다는 것입니다

gcc -o $(LIB) $(SRC) -I/home/jagbirs/Downloads/sample/SampleExtLib1 -L/home/jagbirs/Downloads/sample/SampleExtLib1 -lext_lib1 
+0

외부 라이브러리와 여기에 연결하려고합니까? – Sunny

+0

예, 헤더는 라이브러리의 _contract_ 또는 인터페이스를 포함하므로 라이브러리에 의존하는 프로젝트와 라이브러리간에 헤더가 공유됩니다. 데비안 기반 시스템에서 기본 라이브러리에 링크하려면 헤더 파일이 들어있는'lib -dev' 패키지를 설치하십시오. 'lib '패키지에는 공유 라이브러리 (바이너리) 만 들어 있습니다. – nif

+0

main.c에서 #include "ext_lib1.h"를 제거한 다음 컴파일, 링크 및 정상적으로 실행했습니다. 내가 틀렸다면 나를 정정하십시오. 그러나 공유 라이브러리를 링크했다면 함수가 공유 라이브러리에서 직접 선택되므로 헤더 파일을 명시 적으로 포함 할 필요가 없습니다. 이것이 내가 관찰 한 것입니다. 내가 틀렸다면 나를 바로 잡아주세요. – Sunny