Linux靜態庫與動態庫的使用

2021-10-22 08:32:19 字數 1998 閱讀 8462

一、linux基本操作命令

首先建立unsgn_pow.c檔案,包含unsgn_pow()函式的定義:

//建立檔案

[root@localhost ~

]# cd /home

[root@localhost home]# mkdir aiy

[root@localhost home]# cd aiy

[root@localhost aiy]# touch unsgn_pow.c

編寫unsgn_pow.c檔案的程式:

unsigned

long

long

unsgn_pow

(unsigned

int x,

unsigned

int y)

else

if(y==1)

else

return res;

}

然後建立pow_test.c檔案,同unsgn_pow.c建立檔案的步驟一樣

編寫pow_test.c檔案:

#include

#include

intmain

(int argc,

char

*ar**)

res=

unsgn_pow

(x,y)

;printf

("%u ^ %u = %u\n"

,x,y,res)

;exit(0

);}

接下來建立靜態庫

不過前提是先安裝gcc編譯器

//執行如下兩行,安裝完畢即可

yum -y install gcc gcc-c++ out autoconf pcre pcre-devel make automake

yum -y install wget httpd-tools vim

使用歸檔工具ar將一些目標檔案集中在一起

gcc -c unsgn_pow.c

ar rcsv libpow.a unsgn_pow.o

下面編譯主程式,將會鏈結到剛生成的靜態庫libpow.a

gcc -o pow_test pow_test.c -l.

-lpow

./pow_test 2

10

執行結果

2^10

=1024

三、動態庫的建立與使用

首先使用gcc的-fpic選項為動態庫構造乙個目標檔案

gcc -fpic -wall -c unsgn_pow.c
接下來,使用-shared選項和已建立的位置無關目標**,生成乙個動態庫libpow.so

gcc -shared -o libpow.so unsgn_pow.o
編譯主程式,鏈結剛生成的動態庫

gcc -o pow_test pow_test.c -l.

-lpow

最後執行程式,不過在執行程式之前,需要註冊動態庫,執行如下命令即可

export ld_library_path=$ld_library_path:

/usr/cluster/

.share/lib

source /etc/profile

最後切換到建立庫的那個資料夾

cd /home/aiy

./pow_test 2

10

執行結果

2^10

=1024

linux動態庫與靜態庫使用比較

在windows下,動態庫dll的使用往往伴隨著lib的指引,而linux使用動態庫和靜態庫則有較大的不同。1.靜態庫 名字一般是lib a 利用靜態函式庫編譯成的檔案比較大,因為整個 函式庫的所有資料都會被整合進目標 中,編譯後的執行程式不需要外部的函式庫支援,但是,公升級比較麻煩。每一次版本更新...

Linux靜態庫與動態庫

靜態庫 a 靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。編譯程式時候需要庫作依賴,執行時候不需要。方便,不再需要外部函式庫支援 缺點 1 因為靜態庫被鏈結後直接嵌入可執行程式中,相當於每乙個可執行程式裡都有乙個庫的副本,浪費空間 2 一旦庫中有bug,需要重新編譯。建立步驟 1 編寫函...

linux動態庫與靜態庫

現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始。盡量不重複做別人已經做過的事,站在巨人的肩膀上 做事情。根據鏈結時期的不同,庫又有 靜態庫和共享庫 動態庫 二者的不同點在於 被載入的時刻不同,靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。共享庫的 是在可執行程式執行時...