Linux 關於動態鏈結庫以及靜態鏈結庫的一些概念

2021-08-25 10:29:53 字數 1151 閱讀 5986

動態庫(dynamic link library abbr,dll)技術是程式設計中經常採用的技術。其目的減少程式的大小,節省空間,提高效率,具有很高的靈活性。採用動態庫技術對於公升級軟體版本更加容易。與靜態庫(static link library)不同,動態庫裡面的函式不是執行程式本身的一部分,而是根據執行需要按需載入,其執行**可以同時在多個程式中共享。

在windows和linux作業系統中,都可採用這種方式進行軟體設計,但他們的呼叫方式以及程式編制方式不盡相同。本文首先分析了在這兩種作業系統中通常採用的動態庫呼叫方法以及程式編制方式,然後分析比較了這兩種方式的不同之處,最後根據實際移植程式經驗,介紹了將vc++編制的windows動態庫移植到linux下的方法。

2、動態庫技術

windows和linux採用動態鏈結庫技術目的是基本一致的,但由於作業系統的不同,他們在許多方面還是不盡相同,下面從以下幾個方面進行闡述。

(1)動態庫程式編寫,在windows系統下的執行檔案格式是pe格式,動態庫需要乙個dllmain函式作為初始化的人口,通常在匯出函式的宣告時需要有_declspec(dllexport)關鍵字。linux下的gcc編譯的執行檔案預設是elf格式,不需要初始化入口,亦不需要到函式做特別宣告,編寫比較方便。

(2)動態庫編譯,在windows系統下面,有方便的除錯編譯環境,通常不用自己去編寫makefile檔案,但在linux下面,需要自己動手去編寫makefile檔案,因此,必須掌握一定的makefile編寫技巧,另外,通常linux編譯規則相對嚴格。

(3)動態庫呼叫方面,windows和linux對其下編制的動態庫都可以採用顯式呼叫或隱式呼叫,但具體的呼叫方式也不盡相同。

(4)動態庫輸出函式檢視,在windows中,有許多任務具和軟體可以進行檢視dll中所輸出的函式,例如命令列方式的dumpbin以及vc++工具中的depends程式。在linux系統中通常採用nm來檢視輸出函式,也可以使用ldd檢視程式隱式鏈結的共享物件檔案。

(5)對作業系統的依賴,這兩種動態庫執行依賴於各自的作業系統,不能跨平台使用。因此,對於實現相同功能的動態庫,必須為兩種不同的作業系統提供不同的動態庫版本。

4、動態庫移植方法

如果要編制在兩個系統中都能使用的動態鏈結庫,通常會先選擇在windows的vc++提供的除錯環境中完成初始的開發,畢

Linux 關於動態鏈結庫以及靜態鏈結庫的一些概念

庫有動態與靜態兩種,動態通常用.so為字尾,靜態用.a為字尾。例如 libhello.so libhello.a 為了在同一系統中使用不同版本的庫,可以在庫檔名後加上版本號為字尾,例如 libhello.so.1.0,由於程式連線預設以.so為檔案字尾名。所以為了使用這些庫,通常使用建立符號連線的方...

動態鏈結庫使用 靜 動態鏈結庫使用總結

一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num1,int num2 int mult i...

靜 動態鏈結庫使用總結

編寫方法 visual studio為例 一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num...