新聞中心
學(xué)習(xí)linux下鏈接共享庫(kù)的原理與使用方法

許多開(kāi)發(fā)者時(shí)常使用Linux下的動(dòng)態(tài)鏈接庫(kù)(dynamic linking library),又稱(chēng)共享庫(kù)(Shared Library),這種庫(kù)經(jīng)過(guò)編譯鏈接,可以被多個(gè)應(yīng)用程序同時(shí)使用,而不需要反復(fù)多次編譯鏈接,從而節(jié)省內(nèi)存空間和計(jì)算機(jī)時(shí)間。那么Linux下鏈接共享庫(kù)的原理又是什么呢?本文就Linux下鏈接共享庫(kù)的原理與使用方法進(jìn)行講解。
Linux下鏈接共享庫(kù)是利用惰性綁定(lazy binding)相關(guān)技術(shù)將被多個(gè)程序共同使用的代碼 or 數(shù)據(jù)模塊進(jìn)行一次編譯,共同生成共享庫(kù),而不是分別編譯成獨(dú)立的目標(biāo)文件,其原理如下:
1. 在編譯生成的可執(zhí)行程序中,通常會(huì)包含一些函數(shù)調(diào)用指令,但是該指令對(duì)應(yīng)的函數(shù)所在的位置并未確定;
2. 當(dāng)程序加載到內(nèi)存后,系統(tǒng)會(huì)根據(jù)動(dòng)態(tài)鏈接庫(kù)的記錄,自動(dòng)將共享庫(kù)加載進(jìn)內(nèi)存,而程序中的相應(yīng)函數(shù)調(diào)用就會(huì)替換成該函數(shù)在共享庫(kù)中的具體位置;
3. 如此,程序就可以正常調(diào)用共享庫(kù)中的函數(shù),從而實(shí)現(xiàn)了共享庫(kù)的鏈接過(guò)程。
Linux下鏈接共享庫(kù)的使用過(guò)程則主要步驟如下:
1. 首先,我們需要將要編譯的代碼文件編譯成共享文件,這可以通過(guò)GCC中的 -fPIC 參數(shù);
2. 然后,編譯器會(huì)將編譯后的目標(biāo)文件生成一個(gè)共享庫(kù)文件,形如libxxx.so;
3. 再則,將生成的共享庫(kù)文件拷貝至系統(tǒng)lib目錄或者指定的目錄,以便被調(diào)用;
4. 最后,通過(guò)-L參數(shù)將要連接的共享庫(kù)目錄指定由編譯器編譯生成可執(zhí)行程序至該目錄,而-l參數(shù)則表示將要調(diào)用的共享庫(kù);
以上就是Linux下鏈接共享庫(kù)的原理與使用方法,如果能正確使用,可以幫助開(kāi)發(fā)者節(jié)省大量開(kāi)發(fā)時(shí)間。以下是示例代碼:
#include
#include //sin_sample.h 中聲明了sin_sample功能
int main(int argc, char** argv)
{
float angle = 3.14f / 2.0f;
printf(“%f\n”,sin_sample(angle));
return 0;
}
// 編譯命令:gcc dynamic_library_example.c -L. -lsin_sample -o dynamic_library
// 運(yùn)行程序 ./dynamic_library
總結(jié)
綜上,Linux下鏈接共享庫(kù)的原理與使用方法是這樣的:共享庫(kù)依靠惰性綁定(lazy binding)技術(shù)將多個(gè)程序共同使用的代碼or數(shù)據(jù)模塊進(jìn)行一次編譯,而在程序加載到內(nèi)存后,入口函數(shù)調(diào)用將會(huì)指向共享庫(kù)中的函數(shù);使用共享庫(kù)的步驟是:將需要編譯文件編譯成共享文件,然后將生成的共享庫(kù)文件拷貝至系統(tǒng)lib目錄或者指定的目錄,最后將該目錄指定到編譯器。正確的使用共享庫(kù)就能達(dá)到節(jié)省計(jì)算時(shí)間的目的。
成都網(wǎng)站營(yíng)銷(xiāo)推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷(xiāo)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。
當(dāng)前文章:學(xué)習(xí)Linux下鏈接共享庫(kù)的原理與使用方法(linux鏈接共享庫(kù))
文章位置:http://m.5511xx.com/article/dppjghi.html


咨詢(xún)
建站咨詢(xún)
