一、當前目錄文件情況,我已把文件清空
二、我現在建立三個 .c文件(其中兩個爲調用方法,一個爲main.c),一個頭文件
/*file1.c*/
#include"stdio.h" // ""表示在函數編譯時會先找我們當前所寫C語言的路徑的庫,<>會直接從系統找庫
void file1(){
printf("這是函數一的輸出\n");// 不要加return 0, 該函數返回類型爲空
}
/*file2.c*/
#include"stdio.h" // ""表示在函數編譯時會先找我們當前所寫C語言的路徑的庫,<>會直接從系統找庫
void file2(){
printf("這是函數二 的輸出\n");// 不要加return 0, 該函數返回類型爲空
}
/*main.c*/
#include"stdio.h
int main(){
printf("我正在調用兩個函數\n");
file1();
file2();
printf("函數調用完畢\n");
return 0;
}
三、目錄文件顯示
先直接編譯執行main.c,黃字表示鏈接錯誤,因爲它沒找到庫
四、我們來生成動態庫和靜態庫
第一步:現將 .c文件轉成 .o(二進制文件)
gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o
第二步生成庫
動態庫生成方法
gcc -shared -fpic -o libpf.so file1.o file2.o
靜態庫生成方法
ar -cr libpf.a file1.o file2.o
目錄顯示
在動態庫、靜態庫同時存在的情況下 ,函數優先執行動態庫。那麼動態庫、靜態庫有什麼區別?
靜態庫是在編譯時寫進執行函數內,動態庫是執行時調用(需要給出找尋路徑,一般默認爲系統庫),
所以前者寫出的文件特別大,後者比較小。如果一個庫改變,前者需要重新編譯全部,後者僅編譯改動的庫即可。
下面我們看執行動態庫的情況
爲什麼還出現報錯?上文我們說明了,動態庫執行是要從系統庫裏查找,我們把動態庫放到系統庫裏試下(我的電腦是在/lib)
靜態庫的調用就比較簡單了,直接gcc -L. -lpf -o test2
如果不想把動態庫放進/lib ,可以採取export LD_LIBRARY_PATH=:'pwd'
大家有什麼想法可留言(限新手),後續我會繼續寫更多文章,本人也是初學Linux幾個月,
如有不足請各位多多指點。