摘要:動態鏈接庫技術實現和設計程序常用的技術,在Windows和Linux系統中都有動態庫的概念,采用動態庫可以有效的減少程序大小,節省空間,提高效率,增加程序的可擴展性,便于模塊化管理。但不同操作系統的動態庫由于格式不同,在需要不同操作系統調用時需要進行動態庫程序移植。本文分析和比較了兩種操作系統動態庫技術,并給出了將Visual C++編制的動態庫移植到Linux上的方法和經驗。
關鍵詞:動態鏈接庫 Linux編程 程序移植
1 引言
動態庫(Dynamic Link Library abbr,DLL)技術是程序設計中經常采用的技術。其目的減少程序的大小,節省空間,提高效率,具有很高的靈活性。采用動態庫技術對于升級軟件版本更加容易。與靜態庫(Static Link Library)不同,動態庫里面的函數不是執行程序本身的一部分,而是根據執行需要按需載入,其執行代碼可以同時在多個程序中共享。
在Windows和Linux操作系統中,都可采用這種方式進行軟件設計,但他們的調用方式以及程序編制方式不盡相同。本文首先分析了在這兩種操作系統中通常采用的動態庫調用方法以及程序編制方式,然后分析比較了這兩種方式的不同之處,最后根據實際移植程序經驗,介紹了將VC++編制的Windows動態庫移植到Linux下的方法。
2 動態庫技術
2.1 Windows動態庫技術
動態鏈接庫是實現Windows應用程序共享資源、節省內存空間、提高使用效率的一個重要技術手段。常見的動態庫包含外部函數和資源,也有一些動態庫只包含資源,如Windows字體資源文件,稱之為資源動態鏈接庫。通常動態庫以.dll,.drv、.fon等作為后綴。相應的windows靜態庫通常以.lib結尾,Windows自己就將一些主要的系統功能以動態庫模塊的形式實現。
Windows動態庫在運行時被系統加載到進程的虛擬空間中,使用從調用進程的虛擬地址空間分配的內存,成為調用進程的一部分。DLL也只能被該進程的線程所訪問。DLL的句柄可以被調用進程使用;調用進程的句柄可以被DLL使用。DLL模塊中包含各種導出函數,用于向外界提供服務。DLL可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個DLL在內存中只有一個實例;DLL實現了代碼封裝性;DLL的編制與具體的編程語言及編譯器無關,可以通過DLL來實現混合語言編程。DLL函數中的代碼所創建的任何對象(包括變量)都歸調用它的線程或進程所有。
根據調用方式的不同,對動態庫的調用可分為靜態調用方式和動態調用方式。
新聞熱點
疑難解答