linux下的C語言開發(靜態庫)

2021-06-07 16:25:28 字數 1459 閱讀 6215

在我們編寫軟體的過程當中,少不了需要使用別人的庫函式。因為大家知道,軟體是乙個協作的工程。作為個人來講,你不可能乙個人完成所有的工作。另外,網路上一些優秀的開源庫已經被業內廣泛接受,我們也沒有必要把時間浪費在這些重複的工作上面。

既然說到了庫函式,那麼一般來說庫函式分為兩種方式:靜態庫和動態庫。兩者的區別其實很小,靜態庫是必須要鏈結到執行檔案中去的,而動態庫是不需要鏈結到最後的執行檔案中的。怎麼理解呢?也就是說,對於最後的執行檔案而言,你是否刪除靜態庫無所謂。但是,一旦你刪除了動態庫,最後的執行檔案就玩不轉了。

今天我們討論的問題是靜態庫。為了顯示windows和linux建立靜態庫之間的差別,我們首先在windows上面利用visual c++6.0建立乙個靜態庫。原始檔的**很簡單,

#include "test.h"

int add(int a, int b)

標頭檔案**也不難,

#ifndef _test_h

#define _test_h

int add(int a, int b);

#endif

如果你需要在windows上面建立乙個靜態庫,那麼你需要進行下面的操作,

(1)開啟visual c++ 6.0工具,單擊【file】-> 【new】->【projects】

(2)選擇【win32 static library】,同時在【project name】寫上專案名稱,在【location】選擇專案儲存位址

(3)單擊【ok】,繼續單擊【finish】,再單擊【ok】,這樣乙個靜態庫工程就建立好了

(4)重新單擊【file】->【new】->【files】,選擇【c++ source files】,

(5)選中【add to pproject】,將原始檔加入到剛才建立的工程中去,在file中輸入檔名+.c字尾

(6)重複4、5的操作,加入乙個檔名+.h標頭檔案

(7)分別在標頭檔案和原始檔中輸入上面的**,單擊f7按鈕,即可在debug目錄中生成*.lib靜態庫檔案

那麼,在linux下面應該怎麼執行呢?其實很簡單,兩條命令解決,

(1)首先生成*.o檔案,輸入gcc -c test.c -o test.o

(2)利用ar命令生成靜態庫,輸入ar rc libtest.a test.o

此時如果還有乙個hello.c檔案使用到了這個靜態庫,比如說 ,

#include #include "test.h"

int main()

其實也很簡單,輸入乙個簡單的命令就可以生成執行檔案了,

(1)首先輸入gcc hello.c -o hello ./libtest.a  ( ?????)

(2)輸入./hello,驗證生成的執行檔案是否正確

(3)朋友們可以刪除libtest.a檔案,重新輸入./hello,驗證執行檔案是否可以正常執行

linux下的C語言開發(靜態庫 動態庫)

動態鏈結庫不是linux獨有的特性,在windows下面也存在這樣的特性。一般來說,windows下面的動態連線庫是以 dll作為結尾的,而linux下面的動態連線庫是以 so結尾的。和靜態鏈結庫相比,動態連線庫可以共享記憶體資源,這樣可以減少記憶體消耗。另外,動態連線是需要經過作業系統載入器的幫助...

Linux下C語言開發 動靜態庫的生成

0人收藏此文章,我要收藏 發表於2年前 已有440次閱讀 共0 我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還...

linux下的C語言開發(動態庫)

摘自 動態鏈結庫不是linux獨有的特性,在windows下面也存在這樣的特性。一般來說,windows下面的動態連線庫是以 dll作為結尾的,而linux下面的動態連線庫是以 so結尾的。和靜態鏈結庫相比,動態連線庫可以共享記憶體資源,這樣可以減少記憶體消耗。另外,動態連線是需要經過作業系統載入器...