程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Unix下設計動態庫的方法《精通Unix下C語言編程與項目實踐》(一)

Unix下設計動態庫的方法《精通Unix下C語言編程與項目實踐》(一)

編輯:關於C語言

  精通Unix下C語言編程與項目實踐

之動態庫的生成

作者:朱雲翔,胡平 

3.3 動態庫的生成

動態庫的生成可分為三個步驟,設計庫源碼、編譯位置無關碼PIC)型.o文件和鏈接動態庫。鏈接動態庫的命令包含特殊標志,與鏈接靜態庫和鏈接可執行目標文件有區別,而且不同的Unix系統,其實現的細節也不盡相同。 編譯PIC型.o中間文件的方法一般是采用C語言編譯器的“-KPIC”或者“-fpic”選項,有的Unix版本C語言編譯器缺省帶上了PIC標志。創建最終動態庫的方法一般是采用C語言編譯器的“-G”或者“-shared”選項,或者直接使用工具ld創建。 本處設計一個創建並調用動態庫的例子,分別將源文件d1.c和d2.c編譯為動態庫d1.so和d2.so,並在主程序中調用之。

1. 設計庫源碼

程序pr1.c提供了函數print和變量p,如代碼3-4所示: 代碼3-4 動態庫源碼節自/code/chapter3/d1.c) int p = 2; void print() {         printf("This is the first dll src!\n"); } 程序pr2.c也提供了自己的函數print和變量p,如代碼3-5所示: 代碼3-5 動態庫源碼節自/code/chapter3/d2.c) int p = 3; void print() {         printf("This is the second dll src!\n"); }

2. ScoSolaris系列

    通過cc的“-KPIC”選項生成PIC中間文件,再通過cc的“-G”選項鏈接成動態庫: cc –O -KPIC -c d1.c d2.c    /* 編譯以“.o”為擴展名的中間目標文件d1.o和d2.o */ cc -G -o d1.so d1.o     /* 根據中間目標文件d1.o創建動態庫文件d1.so */ cc -G -o d2.so d2.o     /* 根據中間目標文件d2.o創建動態庫文件d2.so */ 或者直接一步到位,直接創建動態庫文件d1.so和d2.so: cc -O -KPIC -G -o d1.so d1.c                    /* 創建動態庫文件d1.so */ cc -O -KPIC -G -o d2.so d2.c                    /* 創建動態庫文件d2.so */

3. HP-UNIX系列

創建 PIC 中間文件的編譯器選項是+z,創建動態庫的鏈接器標志是-b: cc +z -c d1.c d2.c      /* 編譯以“.o”為擴展名的中間目標文件d1.o和d2.o */ ld -b -o d1.so d1.o     /* 根據中間目標文件d1.o創建動態庫文件d1.so */ ld -b -o d2.so d2.o     /* 根據中間目標文件d2.o創建動態庫文件d2.so */ 與大部分系統不同的是,HP-UNIX缺省使用“.sl”做動態庫的擴展名。

4. AIX系列

在AIX中,cc和xlc系列都是C語言編譯器。 xlc_r4 -c d1.c d2.c     /* 編譯以“.o”為擴展名的中間目標文件d1.o和d2.o */ ld -G -bnoentry -bexpall -lc d1.o -o d1.so  /* 創建動態庫文件d1.so */ ld -G -bnoentry -bexpall -lc d2.o -o d2.so  /* 創建動態庫文件d2.so */ ld是創建動態庫的工具,它的常用選項與cc類似,比如“-l”標識鏈接庫,“-o”標識目標文件名稱等。本處“-G”選項等價於指定帶有-b標記的 erok、rtl、nortllib、nosymbolic、noautoexp 和 M:SRE選項,它將創建動態庫對象。更多的ld信息請參考相關文檔。

5. Linux和其他使用gcc編譯器的Unix

gcc -fpic -c d1.c d2.c  /* 編譯以“.o”為擴展名的中間目標文件d1.o和d2.o */ gcc -shared -o d1.so d1.o   /* 根據中間目標文件d1.o創建動態庫文件d1.so */ gcc -shared -o d2.so d2.o   /* 根據中間目標文件d2.o創建動態庫文件d2.so */ 或者直接一步到位: gcc -O -fpic -shared -o d1.so d1.c          /* 創建動態庫文件d1.so */ gcc -O -fpic -shared -o d2.so d2.c          /* 創建動態庫文件d2.so */ 某些版本的gcc上也可以使用“-G”替換“-shared” 選項。   相關文章: 封面          前言        目錄         策劃         作者 動態庫        變長參數    文件鎖    

本文出自 “編程浪子朱雲翔” 博客,請務必保留此出處http://zhuyunxiang.blog.51cto.com/653596/128695

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