動態庫的編譯:
g++ -Wall -fPIC -shared -o DataLog.so DataLog.cpp -I ./ -lpthread -L ../lib -llog4cpp
其中:-shared 指出編譯、連結的目標是一個.so的動態庫
-fPIC 對於64位平台是必需的
靜態庫的編譯過程:
g++ -Wall -static -o DataLog.o -c DataLog.cpp -I ./
其中: -c 是只做編譯,不做連結的選項,編譯的結果是一個.o檔案
用.o建立靜態庫:
ar rscv libDataLog.a DataLog.o
以下轉自:http://blog.csdn.net/whyacinth/archive/2007/11/16/1889048.aspx
**********************gcc/egcs 的主要選項*********
gcc 命令的常用選項
選項 解釋
-ansi 只支援 ANSI 標準的 C 文法。這一選項將禁止 GNU C 的某些特色,
例如 asm 或 typeof 關鍵詞。
-c 只編譯並產生目標檔案。
-DMACRO 以字串“1”定義 MACRO 宏。
-DMACRO=DEFN 以字串“DEFN”定義 MACRO 宏。
-E 只運行 C 先行編譯器。
-g 產生調試資訊。GNU 調試器可利用該資訊。
-IDIRECTORY 指定額外的標頭檔搜尋路徑DIRECTORY。
-LDIRECTORY 指定額外的函數庫搜尋路徑DIRECTORY。
-lLIBRARY 串連時搜尋指定的函數庫LIBRARY。
-m486 針對 486 進行代碼最佳化。
-o FILE 產生指定的輸出檔案。用在產生可執行檔時。
-O0 不進行最佳化處理。
-O 或 -O1 最佳化產生代碼。
-O2 進一步最佳化。
-O3 比 -O2 更進一步最佳化,包括 inline 函數。
-shared 產生共用目標檔案。通常用在建立共用庫時。
-static 禁止使用共用串連。
-UMACRO 取消對 MACRO 宏的定義。
-w 不產生任何警告資訊。
-Wall 產生所有警告資訊。
########建立和使用共用庫#########
特殊的編譯和串連選項
-D_REENTRANT 使得前置處理器符號 _REENTRANT 被定義,這個符號啟用一些宏特性。
-fPIC 選項產生位置獨立的代碼。由於庫是在啟動並執行時候被調入,因此這個
選項是必需的,因為在編譯的時候,裝入記憶體的地址還不知道。如果
不使用這個選項,庫檔案可能不會正確運行。
-shared 選項告訴編譯器產生共用庫代碼。
-Wl,-soname -Wl 告訴編譯器將後面的參數傳遞到連接器。而 -soname 指定了
共用庫的 soname。
# 可以把庫檔案拷貝到 /etc/ld.so.conf 中列舉出的任何目錄中,並以
root 身份運行 ldconfig;或者
# 運行 export LD_LIBRARY_PATH='pwd',它把當前路徑加到庫搜尋路徑中去。
ldconfig命令的用途,主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫設定檔/etc/ld.so.conf內所列的目錄下,搜尋
出可共用的動態連結程式庫(格式如前介紹,lib*.so*),進而建立出動態裝入程式(ld.so)所需的串連和快取檔案.快取檔案預設為/etc
/ld.so.cache,此檔案儲存已排好序的動態連結程式庫名字列表.
ldd 用來顯示執行檔案需要哪些共用庫, 共用庫裝載管理器在哪裡找到了需要的共用庫.
另外參考Zcanoe 在chinaunix的文章http://os.chinaunix.net/a2007/1015/976/000000976498.shtml