linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
Linux下動(dòng)態(tài)庫(kù)文件的擴(kuò)展名為"。so"(Shared Object)。按照約定,所有動(dòng)態(tài)庫(kù)文件名的形式是libname。so(可能在名字中加入版本號(hào))。這樣,線程函數(shù)庫(kù)被稱(chēng)作libthread。so。靜態(tài)庫(kù)的文件名形式是libname。a。
共享archive的文件名形式是libname。sa。共享archive只是一種過(guò)渡形式,幫助人們從靜態(tài)庫(kù)轉(zhuǎn)變到動(dòng)態(tài)庫(kù)。
本文僅以簡(jiǎn)單的例子介紹動(dòng)態(tài)庫(kù)文件的生成和鏈接方法。
操作系統(tǒng):Debian/GNU Linux 2。6。21-2-686; GCC版本:4。
1。3
一、庫(kù)文件及測(cè)試文件代碼
庫(kù)文件及測(cè)試文件所在的目錄:/home/program/。
1。庫(kù)文件名:myfunction。c/*Author: Godbach
E-mail: nylzhaowei@163。com*/#include intmy_lib_function (void){
printf ("Library routine called from libmyfunction。
so!\n");
return 0;}
2。測(cè)試文件名:test。c#include int main(void){
my_lib_function();
return 0;}
二、動(dòng)態(tài)庫(kù)的編譯方法
編譯庫(kù)文件myfunction。
c:debian:/home/program# gcc -shared -o libmyfunction。so myfunction。c
如果編譯成功,會(huì)在/home/program/下生成動(dòng)態(tài)庫(kù)文件:libmyfunction。so。
這里有兩點(diǎn)需要說(shuō)明:
1。
對(duì)Linux操作,一般都推薦在普通用戶(hù)模式下,如果需要超級(jí)用戶(hù)的權(quán)限,則可以通過(guò)su root,輸入root用戶(hù)密碼切換。我是個(gè)人學(xué)習(xí)使用,同時(shí)又有很多的操作都要使用root用戶(hù),因此就直接在root用戶(hù)下進(jìn)行編譯。
2。編譯生成動(dòng)態(tài)庫(kù)的命令為:gcc (-fpic) -shared -o libmyfunction。
so myfunction。c
-fpic 使輸出的對(duì)象模塊是按照可重定位地址方式生成的。
-shared指定把對(duì)應(yīng)的源文件生成對(duì)應(yīng)的動(dòng)態(tài)鏈接庫(kù)文件。
三、動(dòng)態(tài)庫(kù)的測(cè)試方法
編譯測(cè)試文件test。c:debian:/home/program# gcc -o test test。
c /home/program/libmyfunction。so
成功編譯后,生成test文件,運(yùn)行test:debian:/home/program# 。/test Library routine called from libmyfunction。
so!
其中,gcc -o test test。c /home/program/libmyfunction。so的最后一個(gè)參數(shù)指定所鏈接庫(kù)文件的絕對(duì)路徑。本例中庫(kù)文件的絕對(duì)路徑為:/home/program/libmyfunction。so。
當(dāng)然,如果想從系統(tǒng)的庫(kù)文件路徑(通常系統(tǒng)函數(shù)庫(kù)的位于/usr/lib下)鏈接動(dòng)態(tài)庫(kù)的話,可以先將生成的庫(kù)文件拷貝至/usr/lib/下,然后再鏈接:debian:/home/program# cp libmyfunction。so /usr/lib/debian:/home/program# gcc -o test test。
c -lmyfunctiondebian:/home/program# 。/test Library routine called from libmyfunction。so!
這里,對(duì)于鏈接的方法作一下解釋。對(duì)于gcc -o test test。
c -lmyfunction中最后一個(gè)參數(shù)-lmyfunction, 可見(jiàn)傳給C編譯器的命令行參數(shù)并未提到函數(shù)庫(kù)的完整路徑名,甚至沒(méi)有提到在函數(shù)庫(kù)目錄中該文件的完整名字!實(shí)際上,編譯器被告知根據(jù)選項(xiàng)-lmyfunction鏈接到相應(yīng)的函數(shù)庫(kù)(/usr/lib下),函數(shù)庫(kù)的名字是libmyfunction。
so, 也就是說(shuō),"lib"部分和文件的擴(kuò)展名被省略了,但在前面加了一個(gè)l。
全部
總結(jié)
以上是生活随笔為你收集整理的linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux看门狗设备,基于Linux构建
- 下一篇: linux内核grub的作用与用途,li