Linux動態庫和靜態庫基礎

2021-07-07 04:12:31 字數 879 閱讀 4932

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

引用庫: -lhello

3.指定標頭檔案

gcc main.c -o main -i include

include:標頭檔案的存放路徑

4.指定庫檔案

gcc main.c -o main -l lib -lhello

lib:庫檔案的存放路徑

5.配置庫路徑

vi /etc/ld.so.conf

編輯,新增庫所在的路徑

# ldconfig 

重新生成ld.so.cache

6.配置庫環境變數

export ld_library_path=$ld_library_path:./lib

離開終端就失效,可以寫入:~/.bashrc 或 ~/.bash_profile 或 /etc/profile

6.檢視程式需要的動態庫

ldd ./main

6.gcc/g++ 常用選項

-wall: 開啟幾乎所有的警告

-werror:將所有的警告視為錯誤

-g:產生除錯資訊

-o1/2/3:優化,有3個級別,一般使用-o2

一般為:-wall -werror -o2

7.【注意】:若目錄同時存在.a和.so庫,那編譯器缺省會先使用.so動態庫,若要使用靜態庫,只需將.so重新命名或者移動到其他目錄即可。

動態庫和靜態庫

本文主要解決以下幾個問題 1 為什麼要使用庫?2 庫的分類 3 建立自己的庫 或許大家對自己初學linux時的情形仍記憶尤新吧。如果沒有乙個能較好的解決依賴關係的包管理器,在linux下安裝軟體將是一件及其痛苦的工作。你裝a包時,可能會提示你要先裝b包,當你費盡心力找到b包時,可能又會提示你要先安裝...

動態庫和靜態庫

先抄一段 windows下的動態庫和靜態庫區別解釋,其實linux下意義一樣的,不過字尾名有些區別 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知...

動態庫和靜態庫

簡單的說,使用動態庫就是在鏈結的時候,不會將動態庫的 鏈結到可執行檔案中,而是採用symbol的方式。使用靜態庫,生成可執行檔案的時候,會將靜態庫的 鏈結到可執行檔案中。這樣,動態庫體積會很小,並且可以,依賴於更新的動態庫,但是,缺點是不穩定。靜態庫會更加穩定,但是體積會很大。靜態庫 就是多個目標檔...