Linux生成動態庫系統

2021-09-07 01:14:52 字數 1773 閱讀 8551

linux下動態庫檔案的擴充套件名為 ".so"(shared object)。
依照約定,全部動態庫檔名稱的形式是libname.so(可能在名字中增加版本)。

這樣。執行緒函式庫被稱作libthread.so。

靜態庫的檔名稱形式是libname.a。共享archive的檔名稱形式是libname.sa。共享archive僅僅是一種過渡形式,幫助人們從靜態庫轉變到動態庫。

作業系統:ubuntu 14.0.4
gcc版本號:4.1.3
庫檔案及測試檔案所在的資料夾:/home/test/program/ 

1、 庫檔名稱:mylibsrc.c

/*
filename: mylibsrc.c
*/
#include
#include"mylibinclude.h"
int
mylibsrcfun()
2、  測試檔案:main.c

/*
filename: main.c
*/
#include
#include"mylibinclude.h"
int main(intargc, char** argv)
3、  標頭檔案:mylibinclude.h

/*
filename: mylibinclude.h
*/
intmylibsrcfun();//宣告一下函式
編譯庫檔案 mylibsrc.c 命令例如以下:
$ gcc mylibsrc.c -shared -o libmylib.so

或是:$  gcc mylibsrc.c -fpic-shared -g -ddebug -o libmylib.so

假設編譯成功,會在資料夾/home/test/program/ 下生成動態庫檔案:libmylib.so

這裡有兩點須要補充說明:

a、 對於linux操作,一般都推薦在普通使用者模式下,假設須要超級使用者的許可權,則能夠通過sudo 或是 su root ,輸入root使用者password切換。

鑑於個人學習使用時,同一時候非常多操作又需都須要使用root使用者,因此 就直接在root使用者下進行編譯。

b、 編譯生成動態庫時的引數含義 -fpic: 使輸出的物件模組可重定位位址方式生成的。

-shared:  指定把相應的原始檔生成相應的動態鏈結庫檔案。

編譯測試檔案:main.c

main function !

there is mylibsrcfun() 

須要注意的是:

的最後乙個引數是指定特定所連線庫檔案的絕對路徑。本例中的庫檔案的絕對路徑即為/home/test/program/ libmylib.so

$cp libmylib.so  /usr/lib/libmylib.so

實際上,編譯器被告知依據選項  -lmylib 鏈結到對應的函式庫(/usr/lib 下),函式庫的名字是 libmylib.so,也就是說。「lib」部分和檔案的副檔名都被省略了。但在前面加了乙個 『l』                

Linux系統下cmake生成動態庫 靜態庫。

動態庫是在程式的執行階段加入到源 的,在程式的編譯鏈結階段只會生成乙個小小的表,用來記錄呼叫動態庫的位址。形象地講,可執行 和動態庫各是各的,是分開的。只有在程式開始執行後,程式才會去找動態庫,然後一起工作。由動態庫的工作原理可知,程式與動態庫的關聯性極強。當程式執行時必須有動態庫存在。如果執行環境...

Linux生成動態庫 so與生成靜態庫 a

動態庫共享庫 第一步 通過gcc fpic c 編譯生成.o檔案 gcc fpic c a.c 編譯生成.o檔案 fpic與位置無關 gcc fpic c b.c 生成a.o,b.o編譯檔案。第二步 通過上面已經生成的a.o,b.o檔案生成.so檔案 方法1 gcc shared wl o liba...

linux 靜態庫和動態庫生成

靜態庫 ar rcs lib a xx1.o xx2.o 生成靜態庫 c 建立乙個庫 s 建立目標檔案索引,在建立較大的庫時,能加快時間 rablib lib a 為庫檔案建立索引。ar t lib a 檢視庫檔案內所含目標檔案名字 ar tv lib a 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...