一、概念

      所有的编译系统都提供了一种机制,将所有相关的目标模块打包为一个单独的文件,称为静态库(static library)。它可以用作链接器的输入。当链接器构造一个可执行文件时,它只拷贝静态库里被应用程序引用的目标模块。

      通过使用静态库,相关的函数被编译为独立的目标文件,然后封装成一个单独的静态库文件。在链接时,链接器将只拷贝被应用程序引用的目标模块,这就减少了可执行文件在磁盘和存储器中的大小。另一方面,应用程序员只需要包含较少的库文件名字。静态库针对的许多问题是应用程序如何使用大量可用的相关函数。

      网上提供了很多的实例,大多理解有误区:1.在构造静态库时认为只能提供一个模块(.cpp文件)2.认为在构造可执行文件的过程中,会将静态库中所有的二进制文件复制一遍。其实,这是没有理解创建静态库的意义。

二、静态库的创建以及使用

1.创建

      VC6.0的年代,静态链接库还作为一个单独的项目摆出来,但是时过境迁,在VS2010的时候,静态链接库,动态链接库等都归于一类“Win32项目”。因此,创建静态链接库,就要选择“Win32项目”,命好名字后,下一步,在出现的选择对话框中选择静态库(S),附加选项中的“预编译头”可勾可不勾。点击完成创建项目。至此一个静态链接库(LIB)的项目已经创建成功,下面要做的就是给静态链接库添加我们自己的内容。

      分别添加.cpp文件和头文件。(其实只添加.cpp文件就可以创建静态库,这样做只是为了同时提供静态库的接口信息,即其头文件)。

 //lib.h

     #ifndef LIB_H
     #define LIB_H
     int add(int x, int y);
     #endif

//lib.cpp

     #include "lib.h"

     int add(int x, int y)
     {
         return (x+y);
     }

      至此,一个简单的静态链接库已经完成。

      将lib.h头文件和SumLib.lib提交给用户后,用户就可以直接使用其中的add函数了。

2.静态库的使用

       VS2010中调用静态链接库.lib一共有3种方法:

      a. 将静态库和其头文件拷贝到当前工程目录下,在源程序中使用语句#include "lib.h",#pragma comment(lib," **.lib")。

      b. 打开项目的属性,在VC++目录中添加头文件的路径和静态库的路径,在链接器的附加依赖项中添加静态库的名字。在源程序中使用语句#include “lib.h“。

      c. lib.h文件的处理同1或2;对库文件,在工程->添加到工程->文件中导入此.lib文件。