1.編寫子函數
add.c
#include<stdio.h>
int add(int left,int right)
{
return left + right;
}
sub.c
#include<stdio.h>
int sub(int left,int right)
{
return left - right;
}
mul.c
#include<stdio.h>
int mul(int left,int right)
{
return left * right;
}
div.c
#include<stdio.h>
int div(int left,int right)
{
return left / right;
}
2.生成.o文件
gcc -c add.c -o add.o 其中-fPIC選項表示生成與地址無關代碼
分別運行四次生成:add.o sub.o mul.o div.o文件
3.生成動態庫
執行下列命令
gcc -fPIC --share add.o mul.o sub.o div.o -o libmylib.so
-fPIC選項表示生成與地址無關代碼,–share表示生成一個動態庫,其中lib是動態庫的前綴,.so是後綴,中間的mylib是庫名稱。
最後生成:
4.生成靜態庫
執行以下命令
ar -cr libmylib.a add.o mul.o sub.o div.o
ar:靜態庫生成的鏈接器。
-c:創建靜態庫。
-r:模塊替換。
libmychild.a中lib是前綴,.a是後綴名,mylib爲靜態庫名。
運行完後生成以下文件:
5.庫的使用
靜態庫與動態庫名字相同默認鏈接動態庫
編寫四個子函數的頭文件(add.h,sub.h,mul.h,div.h),編寫main.c
#include <stdio.h>
#include"add.h"
#include"sub.h"
#include"mul.h"
#include"div.h"
int main()
{
int a = 10;
int b = 20;
printf(" a + b = %d\n",add(a,b));
printf(" a - b = %d\n",sub(a,b));
printf(" a * b = %d\n",mul(a,b));
printf(" a / b = %d\n",div(a,b));
return 0;
}
5.1 動態庫的使用
1.鏈接庫文件的搜索路徑
(1)將要鏈接的第三方庫(libmylib.so),複製到目錄 /lib64 /usr/lib64 …
(2)也可以使用export LIBRARY_PATH=.環境變量的設置,來設置庫的鏈接搜索路徑
(3)gcc的-L選項,指定鏈接時庫的搜索路徑 gcc main.c -o main -L . -lmylib
gcc main.c -o main -L. -lmylib
2.動態庫的加載搜索路徑
程序運行時,若程序時動態鏈接生成,運行時需要到指定的目錄下加載動態庫 /lib64 /usr/lib64 …
5.2 靜態庫使用
gcc main.c -L -lmychild