程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Linux gcc編譯(動態庫,靜態庫),linuxgcc

Linux gcc編譯(動態庫,靜態庫),linuxgcc

編輯:C++入門知識

Linux gcc編譯(動態庫,靜態庫),linuxgcc


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved