在演示示例之前,我們先要明白以下幾個概念:
1、靜態庫與動態庫的區別:
根據代碼被載入的時間不同,linux下庫分為兩種:靜態庫和動態庫(也叫共享庫)。靜態庫,在編譯時,已經被載入到可執行程序中,靜態庫成為可執行文件的一部分,因此可可執行程序文件比較大。動態庫,可執行程序在執行時,才被引用到內存,因此可執行程序文件小。動態庫,一個顯著特點就是:當多個程序調用同個動態庫時,內存中只有一個動態庫實例。
2、庫命名規范
a)靜態庫以.a 為後綴,動態庫以.so為後綴
b)靜態庫名字一般是libxxx.a,其中xxx 是庫的名字;動態庫的名字一般是libxxx.so.major.minor 其中xxx是庫名,majar 是主版本號,minor是副版本號
3、通過ldd查看程序所依賴的共享庫
查看vim所依賴的共享庫:ldd /usr/bin/vim
4、程序查找動態庫的路徑
/lib 和 /usr/lib 及 /etc/ld.so.conf配置的路徑下
有了上面的簡單介紹,下面,我們開始給出代碼示例了:
1、庫源文件:demo.c
- #include<stdio.h>
-
- int add(int a, int b)
- {
- return a+b;
- }
- int sub(int a, int b)
- {
- return a-b;
- }
- void showmsg(const char * msg){
- printf("%s \n",msg);
- }
- void show(int num)
- {
- printf("The result is %d \n",num);
- }
2、庫頭文件: demo.h
- #ifndef DEMO_H
- #define DEMO_H
- int add(int a, int b);
- int sub(int a, int b);
- void showmsg(const char* msg);
- void show(int num);
- #endif
3、調用庫源文件:main.c
- #include "demo.h"
-
- int main(void){
- int a = 3;
- int b = 6;
- showmsg("3+6:");
- show(add(a,b));
- showmsg("3-6:");
- show(sub(a,b));
- return 0;
- }
4、編譯源文件
- [root@localhost demo]# gcc -c demo.c
- [root@localhost demo]# gcc -c main.c