例如編寫乙個main.c檔案和乙個fun.c檔案
main.c:
#include
intadd
(int
,int);
intmain
(void
)
fun.c:
int
add(
int a,
int b)
然後執行此命令:
gcc -c fun.c
此時會生成目標檔案fun.o
執行此命令:
ar -cr lib***.a fun.o
此時會建立生成乙個靜態庫,庫名為lib***.a,***是你自己定義的名字
c:create
r:replace
執行此命令:
gcc file.c -l ./ -l ***
-l:指定靜態函式庫的位置供查詢,』./'表示靜態函式庫在本目錄下查詢
-l:指定靜態函式庫名
此時會生成可執行檔案a.out
執行
./a.out
即輸出
a + b = 7
gcc -c fun.c
此時生成目標檔案fun.o
執行此命令:
gcc -shared -fpic fun.o -o lib***.so
-shared:生成共享庫
-fpic:產生位置無關**
此時會生成乙個動態庫,庫名為lib***.so
執行此命令:
gcc main.c -l ./ -l ***
此時會生成可執行檔案a.out
執行./a.out命令,此時發現會報錯
no such file or directory...
因為動態庫在使用時,會查詢/usr/lib/目錄下的動態函式庫,而此時我們生成的lib***.so不在這個目錄下。
所以接下來第一種方法可以將這個動態庫移動到這個目錄下,執行命令
sudo mv lib***.so /usr/lib/
再次執行./a.out命令,輸出a + b = 7。
第二種方法可以將生成的動態庫的目錄新增到環境變數ld_library_path中去
執行此命令
sudo export ld_library_path=/...
/…表示你建立生成動態庫的路徑
此時再次執行./a.out,輸出a + b = 7。
還有第三種方法是修改配置指令碼,將生成的動態庫的目錄加到/etc/ld.so.conf中去
執行此命令
sudo vi /etc/ld.so.conf
在此文件中加入你生成動態庫的目錄,儲存退出。
然後執行以下命令
ldconfig /etc/ld.so.conf
接著執行./a.out,輸出a + b = 7。 Linux動態庫和靜態庫基礎
example hello.c hello.h main.c 1.靜態庫 gcc c hello.c ar cr libhello.a hello.o 引用庫 lhello 2.動態庫 gcc c hello.c gcc shared fpci o libhello.so hello.o 引用庫 l...
動態庫和靜態庫
本文主要解決以下幾個問題 1 為什麼要使用庫?2 庫的分類 3 建立自己的庫 或許大家對自己初學linux時的情形仍記憶尤新吧。如果沒有乙個能較好的解決依賴關係的包管理器,在linux下安裝軟體將是一件及其痛苦的工作。你裝a包時,可能會提示你要先裝b包,當你費盡心力找到b包時,可能又會提示你要先安裝...
動態庫和靜態庫
先抄一段 windows下的動態庫和靜態庫區別解釋,其實linux下意義一樣的,不過字尾名有些區別 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知...