C動態庫 靜態庫基礎

2021-06-22 14:19:37 字數 1181 閱讀 8903

一、基本概念:

依據鏈結階段來分,庫有兩種:靜態庫(.a、.lib)和動態庫(.so、.dll)。二者主要的不同點在於**被載入的時刻不同,靜態庫的**在編譯過程中已經被載入可執行程式,因此檔案較大;動態庫的**是在可執行程式執行時才載入記憶體的,在編譯過程中僅簡單的引用,因此**體積較小。

二者的特點總結如下:

靜態庫:

靜態庫對函式庫的鏈結在編譯時就完成;

程式在執行時已無需使用被載入的庫,移植方便;

動態庫:

動態庫把對一些庫函式的鏈結載入推遲到程式執行的時期;

可以實現程序之間的資源共享(因此動態庫也稱為共享庫);

將一些程式公升級變得簡單;

甚至可以真正做到鏈結載入完全由程式設計師在程式**中控制(顯示呼叫)。

1)file

2)ldd

二、乙個例子:

該例子展示了靜態庫和動態庫的生成過程。

準備三個原始檔:hello.h, hello.cpp, main.cpp,如下:

#ifndef hello_h

#define hello_h

void hello(const char *name);

#endif

#include #include #include using namespace std;

void hello(const char * name)

{ cout<<"hello\t"<

1)靜態庫:

a. g++ -c hello.cpp;

b. ar -crv libmyhello.a hello.o;

2)動態庫:

a. g++ -c -fpic hello.cpp;

b. g++ -fpci -shared -o libmyhello.so hello.o;

c. ldd hello;

d. setenv ld_library_path $ob_rel/dir:$ld_library_path

e. echo $ld_library_path;

f. ldd hello.

後面再補描述。

c 靜態庫動態庫

靜態庫 gcc c a.cpp o a.o gcc c b.cpp o b.o ar rcs libmylib.a a.o b.o 使用庫 2種方式 1 gcc test.c o test l 指定庫路徑 i 大寫i 頭檔案目錄 l 庫名字,去除前字尾 2 將庫和標頭檔案拷貝到 usr lib下面 ...

c 動態庫(一)靜態庫

靜態庫lib vs2005 一,建立乙個win32的lib專案,如下圖 二 新增兩個檔案libtest.h,libtest.cpp,如下 libtest.h ifndef lib h define lib h extern c int add int a,int b endif libtest.cp...

C 靜態庫與動態庫

感覺比較形象,就摘過來了.這次分享的 宗旨是 讓大家學會建立與使用靜態庫 動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫 動態庫的底層格式,記憶體布局等,有興趣的同學,推薦一本書 程式設計師的自我修養 鏈結 裝載與庫 庫是寫好的現有的,成熟的,可以復用的 現實中每個程...