庫檔案源代碼,檔案名稱coutlib.c
1 #include <stdio.h>
2 unsigned long count(unsigned int a, unsigned int b)
3 {
4 return a+b;
5 }
程式源代碼,檔案名稱cout.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(int argc,char *argv[])
4 {
5 unsigned int x,y;
6 sscanf(argv[1],"%u",&x);
7 sscanf(argv[2],"%u",&y);
8 printf("result is :%u\n",count(x,y));
9 return 0;
10 }
編譯靜态庫:
1 生成.o檔案gcc -c countlib.c,産物coutlib.o
2 生成.a庫檔案ar crv countlib.a countlib.o,産物coutlib.a
編譯程式(帶靜态庫coutlib.a編譯)
gcc -o count count.c -L./ countlib.a
測試
./cout 2 4
結果 8
編譯動态連結庫
1 生成.o檔案gcc -fPIC -c countlib.c,産物countlib.o
2 生成動态庫檔案 gcc -shared countlib.o -o countlib.so,産物countlib.so
動态連結庫顯式調用:在程式代碼中書寫調用
動态連結庫隐式調用:在程式編譯的時候調用
這裡隻說明一下隐式調用
gcc count.c -o count2 -L./ countlib.so
測試
./cout 2 4
結果
錯誤,沒有coutlib.so檔案
可以考慮把countlib.so放到/usr/lib下面,也可以考慮在/etc/ld/so.conf.d中把目前路徑增加。