如果動態庫與靜態庫同時存在,未指明鏈結方式時,首先使用動態庫進行鏈結。
我的**目錄
一、具體**
1、include
void a();
void b();
2、lib
#include
void a()
#include
void b()
3、src
#include
#include 「../include/a.h」
#include 「../include/b.h」
int main(int argc, char *argv)
二、生成動態庫libmyab.so
在lib目錄下生成libmyqb.so.1.0.1
建立符號鏈結
在src下編譯main.c
上述成功編譯後不能執行,執行ldd檢視依賴的動態庫,其原因是執行時系統無法找到 libmyab.so 而不能載入,因此普通使用者在 ~/.bashrc中加入環境變數ld_library_path
export ld_library_path=$ld_library_path:/home/lib(libmyqb.so所在目錄), 然後用 source ~/.bashrc 使之生效就可執行
root使用者除可以用第4步外還可以用下面方法
在/etc/ld.so.conf檔案中加入共享庫存放的目錄。
使用ldconfig重新整理系統為降低共享庫查詢的時間而建立的/etc/ld.so.cache
三、生成靜態庫libmyab.a
編譯成目標檔案
生成靜態庫 libmyab.a
編譯鏈結
gcc 編譯動態庫和靜態庫
cheungmine 2012 c程式編譯過程 windows7 cygwin gcc 在同乙個目錄下準備好下面3個檔案,其中3 2,3 3用來生成動態庫或靜態庫 主呼叫程式源 3 1 main.c cpp view plain copy print?main.c include include i...
gcc 編譯動態庫和靜態庫 2
在windows下動態鏈結庫是以.dll字尾的檔案,而在linux中,是以.so作字尾的檔案。動態鏈結庫的好處就是節省記憶體空間。1 linux下建立動態鏈結庫 在使用gcc編譯程式時,只需加上 shared選項即可,這樣生成的執行程式即為動態鏈結庫。例如有檔案 hello.c x.h main.c...
GCC編譯動態和靜態鏈結庫
我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...