我在C程序中創建了一些有用的實用函數。它們都位於../lib文件夾中。我有一個包含函數原型的頭文件,它包含`#include「../lib/library.h」。但是,當使用gcc編譯時,我還必須提供包含函數定義的C文件的名稱。使用-gcc自動包含多個源文件?
現在,../lib文件夾中只有3個C文件,但這可能會隨着時間的推移而增長。在編譯我的程序時,有沒有辦法自動告訴gcc包含所有這些文件(包括我的main.c文件)?
我在C程序中創建了一些有用的實用函數。它們都位於../lib文件夾中。我有一個包含函數原型的頭文件,它包含`#include「../lib/library.h」。但是,當使用gcc編譯時,我還必須提供包含函數定義的C文件的名稱。使用-gcc自動包含多個源文件?
現在,../lib文件夾中只有3個C文件,但這可能會隨着時間的推移而增長。在編譯我的程序時,有沒有辦法自動告訴gcc包含所有這些文件(包括我的main.c文件)?
創建一個庫。如果您在Linux上,則必須選擇是否需要靜態庫或共享庫。 靜態庫是在Linux上使用archiver命令創建的。 Google爲「ar」。
ar cr libtest.a test1.o test2.o
現在您可以使用-ltest選項(ltest是您創建的libtest的簡寫)與gcc或g ++鏈接。如果你的代碼只有C代碼,那麼就使用gcc。如果它同時具有C和C++,則使用g ++。
與頭文件一樣,鏈接器在一些標準位置查找庫,包括 包含標準系統庫的/ lib和/ usr/lib目錄。如果 希望鏈接程序也搜索其他目錄,則應該使用-L選項 ,它是-I選項的並行頭文件。您可以使用此行來指示 鏈接程序在在/ usr/local/lib目錄/ MyTest的看着面前的 平時的地方目錄:
g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/MyTest -ltest
雖然你不必使用-I選項來獲得預處理器搜索 當前目錄(查找你的頭文件),你必須使用-L選項來讓鏈接器搜索當前目錄 。特別是,你可以使用以下方法來指示鏈接到 找到測試庫在當前目錄中:
gcc -o app app.o -L. -ltest
共享庫的創建過程也是類似的。一旦你掌握了它,那麼你可以通過makefile來編譯和鏈接。
(:高級Linux編程,鏈接:這篇文章的某些部分是取自http://www.cse.hcmut.edu.vn/~hungnq/courses/nap/alp.pdf)
撥打*庫*。 –
使用Makefile或其他構建工具 –