2013-07-01 79 views
0

我有以下兩個項目:錯誤:Ubuntu的

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

ext_lib1.c 
ext_lib1.h 
Makefile 

/home/jagbirs/Downloads/sample/SampleMakeTest包含:

main.c 
Makefile 

我正在學習如何鏈接外部庫。有一個在ext_lib1.h我使用的main.c是

功能,但我得到以下錯誤化妝後:

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 

兩個makefile文件如下: 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/Makefile文件:

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

clean: 
    rm -f *.o *.a 

可能有些認罪e幫助我弄清楚爲什麼鏈接沒有正確地發生? 感謝

回答

0

嘗試添加-I到包括.h文件庫:

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

這是工作,但問題是,爲什麼我必須包含頭文件還當我創建存檔外部圖書館,並試圖在這裏鏈接它? – Sunny

+0

是的,頭文件在庫和依賴庫的項目之間共享,因爲頭文件包含庫的_contract_或接口。如果你想鏈接到基於Debian系統的默認庫,你很可能會安裝'lib -dev'包,它包含頭文件。而'lib '軟件包只包含共享庫(二進制文件)。 – nif

+0

我從main.c中刪除了#include「ext_lib1.h」,然後編譯,鏈接並運行正常。糾正我,如果我錯了,但如果我已經鏈接了一個共享庫,那麼我不需要明確包含頭文件,因爲這些功能是直接從共享庫中選取的。這是我觀察到的。如果我錯了,請糾正我。 – Sunny