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幫助我弄清楚爲什麼鏈接沒有正確地發生? 感謝
這是工作,但問題是,爲什麼我必須包含頭文件還當我創建存檔外部圖書館,並試圖在這裏鏈接它? – Sunny
是的,頭文件在庫和依賴庫的項目之間共享,因爲頭文件包含庫的_contract_或接口。如果你想鏈接到基於Debian系統的默認庫,你很可能會安裝'lib -dev'包,它包含頭文件。而'lib '軟件包只包含共享庫(二進制文件)。 –
nif
我從main.c中刪除了#include「ext_lib1.h」,然後編譯,鏈接並運行正常。糾正我,如果我錯了,但如果我已經鏈接了一個共享庫,那麼我不需要明確包含頭文件,因爲這些功能是直接從共享庫中選取的。這是我觀察到的。如果我錯了,請糾正我。 – Sunny