静态库








在计算机科学中,靜態庫英语:Static library, Statically-linked library),或称靜態函式庫,是一個外部函式與變數的集合體。靜態函式庫的檔案內容,通常包含一堆程式設計師自定的變數與函式,其內容不像動態連結庫那麼複雜,在編譯期間由編譯器與連結器將它整合至應用程式內,並製作成目的檔以及可以獨立運作的執行檔。而這個執行檔與編譯執行檔的程序,都是一種程式的靜態建立(static build)。以過去的觀點來說,函式庫只能算是靜態(static)類型。




目录






  • 1 与动态链接库的比较


    • 1.1 优点


    • 1.2 缺点




  • 2 实现及使用


    • 2.1 GCC


    • 2.2 Visual C++




  • 3 原始碼範例


    • 3.1 C/C++




  • 4 参见


  • 5 外部連結





与动态链接库的比较



优点


只需保证在开发者的计算机有正确的库文件,在以二进制发布时不需考虑在使用者的计算机上库文件是否存在及版本问题,可避免DLL地狱等问题。



缺点


生成的可执行文件体积较大。当初正是为了避免此问题,才开发了动态库技术。



实现及使用


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


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



GCC


静态库文件名为lib*.a,在使用了其中的函数之后,使用-l*参数要求连接器连入。


例如,在许多系统上,当使用了math.h中的函数后,需要使用-lm参数连接libm.a文件。



Visual C++


静态库文件名为*.lib,在使用了其中的函数之后,使用#pragma comment(lib,"*")预编译指令要求连接器连入。



原始碼範例



C/C++




這是主函式的原始碼與執行結果














靜態函式庫的原始碼範例
標頭檔案(Header File) 原始碼檔案(Source File)

// static_lib.h

# ifndef _STATIC_LIB_H_
# define _STATIC_LIB_H_

# include <iostream>
# include <string>
# include <Windows.h>

using namespace std;

namespace STAIC_LIB
{
BOOL PRINT(__in string& STRING);
}

# endif


// static_lib.cpp

# include "static_lib.h"

BOOL STAIC_LIB::PRINT(__in string& STRING)
{
if ( STRING.empty() )
{
return FALSE;
}
// 顯示一個字串
cout<<STRING<<endl;
return TRUE;
}



参见



  • 函式庫

  • 链接器

  • 载入器

  • 共享库

  • 动态链接库

  • 外部变量

  • 目标文件

  • 预绑定



外部連結


  • The C Book - Linkage.



Popular posts from this blog

Lambaréné

Chris Pine

Kashihara Line