热门问题
时间线
聊天
视角

靜態函數庫

来自维基百科,自由的百科全书

Remove ads

電腦科學中,靜態庫(英語:Static library, Statically-linked library),或稱靜態連結函數庫,是一個外部函數與變量的集合體。靜態函數庫的檔案內容,通常包含一堆程式設計師自訂的變量與函數,其內容不像動態連結庫那麼複雜,在編譯期間由編譯器連結器將它整合至應用程式內,並製作成目標文件以及可以獨立運作的執行檔。而這個執行檔與編譯執行檔的程式,都是一種程式的靜態構建(static build)。歷史上,程式函數庫只能是靜態的。靜態函數庫要麼在構建時組合成為單個靜態連結的可執行檔案,要麼在執行時載入到相應可執行檔案的地址空間中。該地址空間是靜態的,在編譯期或連結期確定,與動態連結函數庫不同。

需要特別指明的一點是,Linux系統下的靜態函數庫檔案並非ELF二進制檔案[1]

與動態連結函數庫的比較

優點

只需保證在開發者的電腦有正確的函數庫檔案,在以二進制發布時不需考慮在用戶的電腦上函數庫檔案是否存在及版本問題,可避免DLL地獄等問題。

缺點

生成的可執行檔案體積較大。當初正是為了避免此問題,才開發了動態函數庫技術。

實現及使用

靜態函數庫可以用簡單的C語言或是C++程式碼去建立它。這兩個程式語言提供關鍵字指定函數與變量是否為外部(external)或是內部(internal)連結,此外,還提供其他的特性。

建立這類的函數庫時,將函數或是變量匯出(export)一定要用外部連結(external linkage )的語法特別指定它們。

靜態函數庫檔名為lib*.a,在使用了其中的函數之後,使用-l*參數要求連接器連入。

例如,在許多系統上,當使用了math.h中的函數後,需要使用-lm參數連接libm.a檔案。

靜態函數庫檔名為*.lib,在使用了其中的函數之後,使用#pragma comment(lib,"*")預編譯指令要求連接器連入。

原始碼範例

C/C++

Thumb
這是主函數的原始碼與執行結果
更多資訊 標頭檔案(Header File), 原始碼檔案(Source File) ...
Remove ads

參見

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads