新聞中心
學習linux下鏈接共享庫的原理與使用方法

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


咨詢
建站咨詢
