Linux中如何建立靜態庫和動態庫

2021-07-27 03:33:20 字數 1555 閱讀 2273

重點內容函式庫分為靜態庫和動態庫兩種:

靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。 

動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。

程式

1: hello.h

#ifndef hello_h

#define hello_h

void hello(const char *name);

#endif //hello_h

程式2: hello.c

#include void hello(const char *name) 程式

3: main.c

#include "hello.h"

int main()

無論動態庫還是靜態庫都需要用到.o檔案來生成,先編譯生成.o檔案。

1:建立靜態庫: 

靜態庫檔名的命名規範是以lib為字首,緊接著跟靜態庫名,擴充套件名為.a。例如:我們將建立的靜態庫名為myhello,則靜態庫檔名就是libmyhello.a。

# ar cr libmyhello.a hello.o 

使用靜態庫:只需要在你的源程式中加入包含你所需要使用到的函式的宣告(即包含標頭檔案),然後在gcc生成目標檔案時候指明靜態庫就ok了(除非你包含的標頭檔案在/usr/include,庫檔案在標準庫/usr/lib,/lib下,否則你得顯示指明他們的路徑)

hello everyone 

刪除靜態庫檔案執行./hello,程式正常執行,說明靜態庫公用函式已經鏈結到目標檔案。

2: 利用.o檔案建立動態庫 

動態庫擴充套件名為.so 

./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: no such file or directory 

哦!出錯了。快看看錯誤提示,原來是找不到動態庫檔案libmyhello.so。程式在執行時,會在/usr/lib和/lib等目錄中查詢需要的動態庫檔案。若找到,則載入動態庫,否則將提示類似上述錯誤而終止程式執行。

如何找到生成的動態庫有3種方式: 

1)把庫拷貝到/usr/lib和/lib目錄下。 

(2)在ld_library_path 

環境變數中加上庫所在路徑。 

例如動態庫 

libhello.so 

在/home/example/lib 

目錄下: ex

port

ldli

brar

ypat

h=ld_library_path:/home/example/lib 

(3) 修改/etc/ld.so.conf 

檔案,把庫所在的路徑加到檔案末尾,並執行 

ldconfig 

重新整理。這樣,加入的目錄下的所有庫檔案都可見。 

當靜態庫和動態庫同名時, gcc 

命令將優先使用動態庫。

Linux中建立靜態庫和動態庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時 會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要 動態庫存在。本文主要通過舉例來說明在linux中如何建立...

Linux中建立靜態庫和動態庫

分類 程式人生 2008 11 05 00 26 257人閱讀 收藏舉報 我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時 會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在...

linux中建立靜態庫和動態庫

1.函式庫有兩種 靜態庫和動態庫。靜態庫在程式編譯的時候會被連線到目標 中,程式執行時將不再需要改靜態庫。動態庫中程式編譯的時候並不會連線到目標 中,而是在程式執行時才被載入,因此在程式執行的時候還需要動態庫的存在。程式1 hello.h ifndef hello h define hello h ...