linux靜態庫的產生與使用(轉)

來源:互聯網
上載者:User

標籤:

源:http://wenku.baidu.com/link?url=nlNfnR_ebnrpCZaQS517EjnIM_LP2kT-_qmk56kCDbyoC35qKWDQQdVfP91vkFlMnmLqLaBTCVMZznjWMa9J09dBiTd2KE8RS2z7O3We2fi

 

庫是一種軟體組件技術,庫裡面封裝了資料和函數。

庫的使用可以使程式模組化。

Windows系統包括靜態連結庫(.lib檔案)和動態連結程式庫(.dll檔案)。

Linux通常把庫檔案存放在/usr/lib或/lib目錄下。

Linux庫檔案名稱由:首碼lib、庫名和尾碼3部分組成,其中動態連結程式庫以.so最為尾碼,靜態連結庫通常以.a作為尾碼。

在程式中使用使用靜態庫和動態庫時,他們載入的順序是不同的。

靜態庫的代碼在編譯時間就拷貝的應用程式中,這樣的優點是節省編譯時間。

動態連結程式庫時程式在開始運行後調用庫函數時才被載入。

靜態庫的建立和使用:

1、在一個標頭檔種聲明靜態庫所匯出的函數。

2、在一個源檔案種實現靜態庫所匯出的函數。

3、編譯源檔案,產生可執行代碼。

4、將可執行代碼所在的目標檔案加入到某個靜態庫中,並將靜態庫拷貝到系統預設的存放庫檔案的目錄下。

下面通過一個例子來說明:mylib.h種存放的是靜態庫提供給使用者使用的函數的聲明,mylib.c實現了mylib.h種聲明的函數。

標頭檔:mylib.h

#ifndef _MYLIB_H_#define _MYLIB_H_ void weclome(void);void outString(const char *str); #endif

源檔案:mylib.c

#include "mylib.h"#include  void welcome(void){    printf("welcome to libmylib\n");} void outString(const char *str){    if(str != NULL)        printf("%s\n", str);}

1>編譯mylib.c產生目標檔案:gcc -o mylib.o -c mylib.c

2>將目標檔案加入到靜態庫中:ar rcs libmylib.a mylib.o

3>將靜態庫copy到Linux的庫目錄(/usr/lib或者/lib)下: cp libmylib.a /usr/lib/libmylib.a

編寫調用庫函數的測試程式test.c:

#include "mylib.h"#include  int main(void){    printf("create and use library:\n");    welcome();    outString("it‘s successful\n");     return 0;}


4>使用靜態庫編譯:gcc -o test test.c -lmylib

這裡注意,編譯時間無需帶上首碼和尾碼。

5>運行可執行程式test:

./test create and use library:

welcome to libmylib

it‘s successful

在Linxu下,可以使用ar命令來建立和修改靜態庫。

這些在linux下man ar一下就可以得到參數,這裡說明幾個常用的

d:從庫中刪除成員檔案。

r:在庫中加入成員檔案,若存在,則替換。

c:建立一個庫。

s:無論ar命令是否修改了庫內容,都強制重建庫符號表。

其他的命令用時再man。

上面這五步是基本的使用,還有需要的話,就要深入的學習了。

 

linux靜態庫的產生與使用(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.