日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...

發(fā)布時(shí)間:2023/12/18 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。