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

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


咨詢
建站咨詢
