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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux 设计与实现 pdf,Linux库的设计与实现.pdf

發(fā)布時(shí)間:2025/3/15 linux 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 设计与实现 pdf,Linux库的设计与实现.pdf 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux庫的設(shè)計(jì)與實(shí)現(xiàn)

一、為什么要使用庫文件

我們?cè)趯?shí)際編程工作中肯定會(huì)遇到這種情況:有幾個(gè)項(xiàng)目里有一些函數(shù)模塊的

功能相同,

實(shí)現(xiàn)代碼也相同,也是我們所說的重復(fù)代碼。比如,很多項(xiàng)目里都有一個(gè)用戶驗(yàn)

證的功能。

代碼段如下:

//UserLogin.h 文件,提供函數(shù)聲明

int IsValidUser(char* username, int namelen);

//UserLogin.c 文件,實(shí)現(xiàn)對(duì)用戶信息的驗(yàn)證

int IsValidUser(char* username, int namelen)

{

int IsValid = 0;

/*下面是具體的處理代碼,略去*/

return IsValid;

}

如果每個(gè)項(xiàng)目都保存著這兩個(gè)UserLogin.h 和UserLogin.c 文件,會(huì)有以下幾個(gè)

弊端:

1、每個(gè)項(xiàng)目里都有重復(fù)的模塊,造成代碼重復(fù)。

2、代碼的重用性不好,一旦IsValidUser 的代碼發(fā)生了變化,為了保持設(shè)計(jì)的一

致性,

我們還要手工修改其他項(xiàng)目里的UserLogin.c 文件,既費(fèi)時(shí)又費(fèi)力,還容易出

錯(cuò)。

庫文件就是對(duì)公共代碼的一種組織形式。

為了解決上面兩個(gè)弊端,就提出了用庫文件存放公共代碼的解決方案,其要點(diǎn)

就是

把公共的(也就是可以被多次復(fù)用的)目標(biāo)代碼從項(xiàng)目中分離出來,統(tǒng)一存放到

庫文件中,

項(xiàng)目要用到這些代碼的時(shí)候,在編譯或者運(yùn)行的時(shí)候從庫文件中取得目標(biāo)代碼

即可。庫文件

又分兩種:靜態(tài)庫和動(dòng)態(tài)庫。

二、靜態(tài)庫與動(dòng)態(tài)庫

如果程序是在編譯時(shí)加載庫文件的,就是使用了靜態(tài)庫。

如果是在運(yùn)行時(shí)加載目標(biāo)代碼,就成為動(dòng)態(tài)庫。

換句話說,如果是使用靜態(tài)庫,則靜態(tài)庫代碼在編譯時(shí)就拷貝到程序的代碼段,

程序的體積會(huì)膨脹。如果使用動(dòng)態(tài)庫,則程序中只保留庫文件的名字和函數(shù)名,

在運(yùn)行時(shí)去查找

庫文件和函數(shù)體,程序的體積基本變化不大。

靜態(tài)庫的原則是“以空間換時(shí)間”,增加程序體積,減少運(yùn)行時(shí)間;

動(dòng)態(tài)庫則是“以時(shí)間換空間”,增加了運(yùn)行時(shí)間,但減少了程序本身的體積。

下面我們就以實(shí)際例子來看看如何使用這兩種庫.

三、靜態(tài)庫的編寫和使用

1、概述

靜態(tài)庫文件的擴(kuò)展名一般為.a,其編寫步驟很簡(jiǎn)單。

⑴編寫函數(shù)代碼

⑵編譯生成各目標(biāo)文件

⑶用ar 文件對(duì)目標(biāo)文件歸檔,生成靜態(tài)庫文件。

注意歸檔文件名必須以lib 打頭。

使用要點(diǎn):

⑴在gcc 的-I 參數(shù)后加上靜態(tài)庫頭文件的路徑。

⑵在gcc 的-L 參數(shù)后加上庫文件所在目錄

⑶在gcc 的-l 參數(shù)后加上庫文件名,但是要去掉lib 和.a 擴(kuò)展名。

比如庫文件名是libtest.a 那么參數(shù)就是 -l test

2、編寫最簡(jiǎn)單的靜態(tài)庫文件

編寫如下兩個(gè)文件,注意放在同一目錄中

myalib.h //靜態(tài)庫頭文件

myalib.c //靜態(tài)庫實(shí)現(xiàn)文件

//myalib.h 文件的內(nèi)容

void test();

//myalib.c 文件的內(nèi)容

#inlcude

void test()

{

printf("test\n");

}

3、制作庫文件

⑴生成目標(biāo)文件

gcc -c myalib.c

執(zhí)行完后會(huì)生成一個(gè)myalib.o 文件

⑵用ar 命令歸檔,格式為ar -rc <.o>

再次提醒,歸檔文件名一定要以lib 打頭, .a 結(jié)尾。

ar -rc libtest.a myalib.o

執(zhí)行完后會(huì)生成一個(gè)libtest.a 文件

4、使用庫文件

⑴編寫一個(gè)測(cè)試程序main.c,內(nèi)容為

//main.c 測(cè)試靜態(tài)庫調(diào)用的程序

#include "myalib.h" //要把函數(shù)的頭文件包含進(jìn)來,否則編譯時(shí)會(huì)報(bào)錯(cuò)

int main(int argc,char* argv[])

{

test();

return 0;

}

⑵編譯目標(biāo)文件,注意要把靜態(tài)庫頭文件的路徑加到-I 參數(shù)里面

gcc -I /root/exercise -o main.o -c main.c

現(xiàn)在生成了一個(gè)main.o 文件

⑶生成可執(zhí)行文件,注意要把靜態(tài)庫文件的路徑加到-L 參數(shù)里面,

把庫文件名(去掉打頭的lib 和結(jié)尾的.a)加到-l 參數(shù)后面。如下面所示

gcc -o main -L/root/exercise main.o -ltest

此時(shí)就會(huì)

總結(jié)

以上是生活随笔為你收集整理的linux 设计与实现 pdf,Linux库的设计与实现.pdf的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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