1. linux 庫路徑: /lib , /usr/lib , /usr/local/lib
2.linux 編譯靜態庫
a.編寫源文件
vi pr1.c
void print1(){
printf("static print1() callback\n");
}
vi pr2.c
void print2(){
printf("static print2() callback\n");
}
vi main.c
int main(){
print1();
print2();
return 0;
}
b.將庫文件編譯obj
cc -c pr1.c pr2.c
查看obj 文件
ls -l pr*.o
c.鏈接靜態庫 , (多個文件打包過程 -r 追加模式)
ar -r libpr.a pr1.o pr2.o
查看打包結果
ar -t libpr.a
d.編譯main ,使用靜態庫 , -L 指定庫目錄 , -l 指定庫文件名 ,源文件 libpr.a 默認需要轉換, 去頭(lib),去尾(包括.以後部份),為 pr. 多個庫,多個文件名,可寫多個 -L , -l , -o 指定編譯輸出文件名。
gcc -o staticdll main.c -L./ -lpr
e. 運行 ./staticdll
3.編譯動態庫
a.編寫源文件
vi pr1dll.c
void print(){
printf("this is dll src \n");
}
vi maindll.c
int main(){
print();
return 0;
}
b.編繹動態庫 -fPIC 指定dll與位置無關 , -o 輸出路徑 , -shared 指定共享模式
gcc -fPIC -shared -o dll.so pr1dll.c
c.編譯主程
gcc -o exedll maindll.c ./dll.so
d.運行: ./exedll
參考資料:
http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html