静态库
外观
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此条目需要补充更多来源。 (2015年1月6日) |
在计算机科学中,静态库(英语:Static library, Statically-linked library),或称静态链接库,是一个外部函式与变数的集合体。静态函式库的档案内容,通常包含一堆程式设计师自定的变数与函式,其内容不像动态连结库那么复杂,在编译期间由编译器与链接器将它整合至应用程式内,并制作成目的档以及可以独立运作的执行档。而这个执行档与编译执行档的程序,都是一种程式的静态建立(static build)。以过去的观点来说,函式库只能算是静态(static)类型。
需要特别指明的一点是,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++
[编辑]![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Static_lib_000.png/220px-Static_lib_000.png)
标头档案(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;
}
|
参见
[编辑]外部链接
[编辑]- ^ File format differences between a static library (.a) and a shared library (.so)?. [2021-09-02]. (原始内容存档于2022-06-29).