當前位置:編程學習大全網 - 編程語言 - binarylinux

binarylinux

如何正確的使用靜態鏈接庫和動態鏈接庫?

動態庫和靜態庫

在Win下,動態庫以.dll結尾,靜態庫以.lib結尾。

在Linux下,動態庫文件以.so結尾,靜態庫以.a結尾。

在Mac下,動態庫以.dylib結尾,靜態庫以.a結尾。

動態庫的優勢和劣勢

動態函數庫在編譯的時候並沒有被編譯進目標代碼中,妳的程序執行到相關函數時才調用該函數庫裏的相應函數,因此動態函數庫所產生的可執行文件比較小。由於函數庫沒有被整合進妳的程序,而是程序運行時動態的申請並調用,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變並不影響妳的程序,所以動態函數庫的升級比較方便。

某個程序在運行時要調用某個動態鏈接庫函數的時候,OS首先查看所有正在運行的進程,找找看是否已經有人載入了這個庫。如果有的話,直接用。如果沒有才會載入。這樣的第壹個優點就是節省內存空間。動態調入意味著是等需要的時候才調入內存,而不是不管用不用都要先放到內存裏來。

我如果想要升級某個軟件。如果升級的位置是在dll裏,那軟件其他的部位不需要重新編譯鏈接。所以升級方便。

靜態庫的優勢和劣勢

利用靜態函數庫編譯成的文件比較大,因為整個函數庫在編譯時都會被整合進目標代碼中,他的優點就顯而易見了,即編譯後的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果妳靜態鏈接的函數庫改變了,那麽妳的程序必須重新編譯。

代碼更精簡,因為不必做版本檢查。

程序分發時文件個數少,因為靜態鏈接到源文件裏了。

只編譯進來庫中所用的部分,而不用整個庫。

生成的binary占空間更大。

重復的庫可能出現在多個進程,浪費內存。

庫內部更新的話需要重新編譯binary。

Linux平臺的靜態庫

靜態庫的生成靜態庫的鏈接

Linux平臺的動態庫

動態庫的生成動態庫的鏈接

Windows平臺的靜態庫

靜態庫的生成/MT使用LIBCMT.lib編譯以創建多線程可執行文件。生成靜態庫lib。r靜態庫的鏈接

1、在使用鏈接庫的代碼開頭加入,第二行是要調用的鏈接庫裏的函數:

2、將要調用的鏈接庫的lib放入項目源代碼中,然後編譯。(編譯的時候不需要dll。這裏把靜態部分lib編譯進了exe,但動態庫dll還沒用。)

3、運行之前要把dll放到exe目錄下。

Windows平臺的動態庫

動態庫的生成/MD使用MSVCRT.lib編譯以創建多線程DLL。生成動態庫。r動態庫的鏈接

1、LoadLibrary(或MFC的AfxLoadLibrary),裝載動態庫。

2、GetProcAddress,獲取要引入的函數,將符號名或標識號轉換為DLL內部地址。

3、FreeLibrary(或MFC的AfxFreeLibrary),釋放動態鏈接庫。

壹天壹點學習Linux之文件類型和後綴名?

linux常見的文件類型

壹般的文件

這個就是我們通過ls-l列出來,第壹欄第壹個字符是-的文件,根據文件的內容也可以分幾類:

純文本文件(ASCII):這個就相當於記事本壹樣,稱為純文本文件,我們可以直接讀取文件裏面的內容。這種文件在linux系統中占很多。

二進制文件(binary):linux系統中的可執行文件(scripts)就是壹個二進制的文件,而且這個文件要有x權限才能被執行。我們系統中的壹些命令就是這類型的文件。

數據格式文件(data):在linux系統中,有些程序在運行的時候會讀取某些特定的數據庫,這些文件就是數據文件。如我們前面講的last命令,調用的就是/var/log/wtmp,如果我們用cat命令來查看/var/log/wtmp這個文件,妳發現全是亂碼。

關於壹些其他的文件類型,如連接文件、設備文件、數據接口文件(sockets)、管道文件(pipe)等等,這些也是壹些特殊的文件類型,我們只需要了解就OK了,在後面的學習中,見到的時候,妳要知道他是什麽東西就可以了。如果想更深入的學習,那就找相關的資料,慢慢研究,如,如何查看壹個數據文件等。

linux文件的後綴名

我們在剛開始的時候也說過,在linux系統上,對這個後綴名要求並不像微軟的win系統壹樣嚴格,只是為了方便確認文件是什麽樣的文件,才在後面加上了相應的後綴。如果壹個文件能用cat命令讀取裏面的內容,我們改了後綴後,同樣還是能用cat讀取出來。

我們也知道,在微軟的win系統上,常用的可執行文件壹般就是以.com、.bat、.exe來結尾。而在我們的linux系統上就不壹樣了,什麽樣的文件我都可以給他加上X(可執行)權限,但能不能執行成功,就要看文件本身的內容了。這裏面有重要的壹點,就是可以被執行和可以執行成功是不壹樣的。例如,我們在root用戶的家目錄裏面有個install.log文件,我們給他加上X權限,雖然是可以執行的文件,但執行後,沒有什麽結果,因為這個文件裏面內容不是我們系統所能執行的,當然他是執行不成功啦!

所以說,為了方便我們認識系統中的文件是幹嗎的。linux系統還是會以相應的後綴名來表示文件的種類的。下面我們就看看壹些常見的後綴

.sh:這個通常是我們自己寫的壹些腳本(scripts)文件,壹般都是通過shell寫的,所以以.sh來表示。

.z,.tar,.tar,.gz,.zip,.tgz:這壹類的文件就是壓縮文件,只是采用的壓縮方式不同而已。

.log:這壹類文件,就是壹些日誌文件。

.conf:這類文件就是壹些配置文件,這個在linux系統上見到的最多。

.rpm:這是紅帽的軟件包,當然,不同的linux發行版本,他們使用的軟件包的後綴是不壹樣的。

.php,.jsp,.html,.css:這壹類,都是網站類型的文件。

當然還有壹些其它的後綴,沒有什麽太大的意義,只是為了我們方便識別,我們簡單的了解壹下。

這個長度已經很長了,足夠我們用了。在後面的學習中,妳會發現,linux系統上,很多軟件的名字都很長,如果壹個字壹個字的打會很浪費時間,而且有時還會打錯,這是不是太不方便了?當然不是啦,長文件名,有利於我們知道這個文件是幹嗎的(我是這麽認為的),其實是在方便我們。為了不讓我們打那麽多的字,在linux系統上,有壹個重要的功能鍵,那就是TAB,這個有補全作用,只要打前幾個字,再按TAB,就補全了,如果按兩次的話,會顯示和這幾個字相關的內容。哈哈,使用linux的朋友不知道這個功能,或不用會這個的話,那就太失敗了!

linux系統中文件的命名規則

我們知道,在linux系統上,基本上都是用命令來操作的,我們所用的shell,自身就有很多的特殊字符,如果我們的文件名和這個shell裏面的特殊字符壹樣的話,那就不好辦了,所以我們在給文件起名的時候,在方便識別的同時,也要避免壹些特殊字符,下面我們列舉出來,代大家參考(並非不能命令這些字符,只是建議避免)。

Linux的所有文件格式?

linux中有七種文件類型:

普通文件類型;

目錄文件類型;

塊設備文件類型;

字符設備類型;

套接字文件類型;

管道文件類型;

鏈接文件類型。

普通文件類型

最常使用的壹類文件,其特點是不包含有文件系統信息的結構信息。通常用戶所接觸到的文件,比如圖形文件、數據文件、文檔文件以及聲音文件都屬於這種文件,這種類型的文件是按照其內部結構又可分為純文本文件(ASCII)、二進制文件(binary)、數據格式的文件(data)、各種壓縮文件。

純文本文件(ASCII):這是Unix系統中最多的壹種文件類型,之所以稱為純文本文件,是因為內容可以直接讀到的數據,例如數字、字母等等。設置文件幾乎都屬於這種文件類型。舉例來說,使用命令“cat~/.bashrc”就可以看到該文件的內容(cat是將文件內容讀出來)。

二進制文件(binary):系統其實僅認識且可以執行二進制文件(binaryfile)。Linux中的可執行文件(腳本,文本方式的批處理文件不算)就是這種格式的。舉例來說,命令cat就是壹個二進制文件。

數據格式的文件(data):有些程序在運行過程中,會讀取某些特定格式的文件,那些特定格式的文件可以稱為數據文件(datafile)。舉例來說,Linux在用戶登入時,都會將登錄數據記錄在/var/log/wtmp文件內,該文件是壹個數據文件,它能通過last命令讀出來。但使用cat時,會讀出亂碼。因為它是屬於壹種特殊格式的文件。

目錄文件類型

用於存放文件名以及其相關信息的文件,是內核組織文件系統的基本節點。目錄文件可以包含下壹級文件目錄或者普通文件,在Linux中,目錄文件是壹種文件。

能用#cd命令進入的。

塊設備文件類型

塊設備文件:就是存儲數據以供系統存取的接口設備,簡單而言就是硬盤。例如壹號硬盤的代碼是/dev/hda1等文件。

字符設備類型

字符設備文件:即串行端口的接口設備,例如鍵盤、鼠標等等。

套接字文件類型

這類文件通常用在網絡數據連接。可以啟動壹個程序來監聽客戶端的要求,客戶端就可以通過套接字來進行數據通信。

管道文件類型

是壹種很特殊的文件,主要用於不同進程的信息傳遞。當兩個進程需要進行數據或者信息傳遞時,可以使用通道文件,壹個進程將需要傳遞的數據或者信息寫入管道的壹端,另壹進程從管道的另壹端取得所需要的數據或者信息,通常管道是建立在調整緩存中。

鏈接文件類型

是壹種特殊文件,指向壹個真實存在的文件鏈接,類似於Windows下的快捷方式,鏈接文件的不同,又可分為硬鏈接文件和符號鏈接文件。

  • 上一篇:為什麽國產手機的文件夾都是英文,不能換成中文?
  • 下一篇:絕對值在c語言中怎麽表示
  • copyright 2024編程學習大全網