用GCC創建自己的靜態、共享庫

創建靜態庫

1.首先將源文件編譯為目標文件

gcc -c calc_mean.c -o calc_mean.o

2.使用ar命令將目標文件打包成靜態庫

ar? rcs libmean.a? ? ? calc_mean.o

關于ar

? ? ar,Linux系統的一個備份壓縮命令,用于創建、修改備存文件(archive),或從備存文件中提取成員文件。ar命令最常見的用法是將【目標文件】打包為【靜態鏈接庫】。

例如:ar rcs libutil.a algorithm.o converter.o processor.o?

三個常用的選項參數:

r ? ?把目標文件加入到庫中,若已經存在則替換掉原來的目標文件

c ? ?若庫不存在,則新建庫

s ? ?寫入一個目標文件索引到庫中,或者更新一個存在的目標文件索引

[注意:靜態鏈接庫的名稱必須以lib開頭,并以.a為后綴]


創建共享庫

1.首先也是將源文件編譯成目標文件,只是使用-fPIC參數

gcc -c -fPIC calc_mean.c -o calc_mean.o

2.將目標文件鏈接成共享庫

gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1? calc_mean.o

關于gcc的一些參數

-fPIC? ? Position independant code, needed for shared libraries. (I am a bit in the dark what exactly the difference between -fpic and -fPIC is. It seems that -fPIC works always while -fpic produces smaller object files.)

-Wl,option ? ?Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. That is, the commas are replaced with spaces.

-shared ? ? ? ? ?This is actually an option to the linker, not the compiler.

庫文件的編譯使用

1.靜態庫的調用

gcc -o test main.c -I頭文件的路徑 -L庫文件的路進 -ltest

如果把頭文件和庫文件復制到gcc默認的頭文件目錄/usr/include和/usr/lib里面,那么編譯程序就跟標準庫函數調用一模一樣了

gcc -o test main.c -ltest

2.動態庫的調用

$ gcc main.c libtest.so (直接指定與 libmylib.so 連結)

或用

$ gcc main.c -L. -ltest (linker 會在當前目錄下搜尋 libtest.so 來進行連結)

如果目錄下同時有 static 與 shared library 的話,會以 shared 為主。

使用 -static 參數可以避免使用 shared 連結。

$ gcc main.c -static -L. -ltest

參考鏈接

Creating a shared and static library with the gnu compiler

linux下制作發布自己的靜態庫

用GCC制作Library

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 動態鏈接,在可執行文件裝載時或運行時,由操作系統的裝載程序加載庫。大多數操作系統將解析外部引用(比如庫)作為加載過...
    小5筒閱讀 5,561評論 0 3
  • 說明本次redis集群安裝在rhel6.8 64位機器上,redis版本為3.2.8,redis的gem文件版本為...
    讀或寫閱讀 15,123評論 3 9
  • static lib & gcc 一、簡單介紹 1.什么是庫? 庫是程序代碼的集合,是共享程序代碼的一種方式 2....
    RealSlimAlan閱讀 678評論 0 3
  • 今天我媽跟我視頻,竟然問我什么時候要小孩!嚇我一跳! 我說不著急,她就說你老大不小了,別等了,遲早都要生,年齡再大...
    零零魚閱讀 547評論 0 0
  • “主銀,你要去哪兒?”毛豆叫住了要出門的猛先生。 “做實驗啊!大塊頭通知了得!”猛先生停住了腳步。 “主銀,現在一...
    亓官長歌閱讀 159評論 0 0