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