静态库 - Wikiwand
For faster navigation, this Iframe is preloading the Wikiwand page for 静态库.

静态库

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

此条目需要补充更多来源。 (2015年1月6日)请协助补充多方面可靠来源以改善这篇条目,无法查证的内容可能会因为异议提出而移除。致用户:请搜索一下条目的标题(来源搜索:"静态库" — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。

电脑科学中,静态库(英语:Static library, Statically-linked library),或称静态库,是一个外部函数与变量的集合体。静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器链接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件。而这个可执行文件与编译可执行文件的程序,都是一种程序的静态创建(static build)。以过去的观点来说,库只能算是静态(static)类型。

与动态链接库的比较

优点

只需保证在开发者的电脑有正确的文件,在以二进制发布时不需考虑在用户的电脑上库文件是否存在及版本问题,可避免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;
}

参见

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
静态库
Listen to this article