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