当前位置:C++技术网 > 资讯 > lib库知识全面讲解:2 lib静态库是如何生成的?怎么生成自己的lib静态库?

lib库知识全面讲解:2 lib静态库是如何生成的?怎么生成自己的lib静态库?

更新时间:2015-10-24 21:18:13浏览次数:1+次

    在《lib库知识全面讲解1:静态链接lib库和lib导入库以及动态链接库dll的关系》,我解释了这几个概念之间的区别和关系。你也可以参考《C++语言零基础入门教程:3.3 链接代码是什么,为什么需要链接,如何链接代码》获得更加丰富的技术介绍。
    那么我们经常要用到别人的静态lib库,那他们是怎么来的呢?要清楚的掌握如何生成静态lib库的,我们不妨自己来写一个简单的静态库,然后自己使用。
    这一篇就介绍生成自己的静态lib库,下一篇来介绍使用。
    我们还是创建一个控制台程序项目,如果你不会创建,请阅读《VS中控制台项目创建方法步骤》。创建控制台项目,所有的VS都是一样的。那么,我们添加一个头文件test.h。在VS中,就是右击“解决方案资源管理器”下项目的“头文件”,然后添加“新建项”,选择头文件,命名为test.h即可。然后在“源文件”右击,选择“新建项”,然后选择源文件,然后命名为test.cpp。当然这个名字自己随便取。然后在test.cpp文件开头包含以下头文件,因为源文件中函数的声明都会放在头文件中。而且,因为是创建lib静态库,最后的函数声明需要放在头文件中供别人使用的。别人拿到静态lib库时一定有一个对应的头文件。所以,函数声明和函数定义分别分到头文件和源文件中。在源文件中包含头文件的代码如下:

#include "test.h"

     如果你自己定义名字,那么这个包含的头文件,一定要是你定义的头文件。名字无关紧要,不过在包含头文件才是将头文件和源文件关联起来的时候。头文件和源文件名称也可以不一样。这些都无所谓的。
    我们在头文件写一个函数的声明如下:

void show(char* szMsg);

     这一句代码就表示了声明,因为这个函数会涉及到标准输出,所以我们在头文件里 包含一个标准输入输出头文件。只要在头文件中包含了,源文件也就可以使用了。当然,你也可以在源文件中包含标准输入输出头文件。随你了,反正如果在头文件中也要用的上的,就直接放在头文件中包含,这样就省事些。
    好了,头文件就这么多,头文件的代码如下:

#include <stdio.h>
void show(char* szMsg);

     在源文件中,我们写show函数的定义,源文件的代码如下:

#include "test.h"
void show(char* szMsg)
{
    printf(szMsg);
}

     就这么多,代码写完了。不对呀,这个怎么和C程序一样呢??是的,好戏才刚刚开始。问题不在于代码怎么写,代码和正常一样的写,不要以为生成静态lib库有什么了不起的哦。
    那么生成静态lib库,关键点在于生成的目标文件的格式了。我们要在项目属性里设置下。
    单击VS的主菜单“项目”,然后单击“XXX属性(P)...”,在弹出的属性页中,我们单击左边的“配置属性”下的“常规”,然后在右边可以看到一系列可以设置的值,如下图所示:

  项目属性设置生成lib静态库
    从图中可以看到,点击“项目默认值”的“配置类型”右边的下拉框,然后可以看到有好几个选项:生成文件、应用程序(.exe)(默认的)、动态库(.dll)、静态库(.lib)和实用工具。那么此时我们选择“静态库(lib)”,确定即可。
    好了,就这样,我们再来点击VS菜单的“重新生成解决方案”,然后看底下的“输出”窗口,看到如下提示:

 
    提示说全部重新生成:成功1个,失败0个,跳过0个。表示没有任何错误。上面提示...Console_1.lib,你看到了lib文件,你说代表什么,这说明生成lib文件成功了。如果失败,是看不到这个的。
    然后到项目文件夹看看lib文件。我们直接在“解决方法资源管理器”最顶部“解决方案XXX(1个项目)”项右击,单击“在文件资源管理器中打开文件夹(X)”,这样就快速打开了项目文件夹哦。
    如果你的VS界面上的工具栏显示的是Debug,那么就是调试模式,那么生成的lib文件在Debug文件夹下。如果是Release模式,则生成的在Release文件夹下。我的工具栏这个位置设置的是Debug,如下图所示:

   
    这个可以自由选择,如果在编码阶段,最好是Debug,方便调试,如果最终发布,就调成发布版的Release版。
    打开文件夹后,看到是这样的:
   
    去“Debug”文件夹看看,是不是真的出现了lib文件呢?看下图:
   
    是不是挺简单的。自己也动手试试吧。不过最后要交待几句。
    因为是静态库,所以你这个库是生成给别人用的,或者是在其他程序使用的,那么就不需要你写main函数了。实际上,这个库就是一个工具库,只需要一些函数就行了。在头文件中有函数声明,在代码中有函数的定义,就可以了。不要在自己的静态库中写main函数哦,不然别人在使用你的静态库可能会出问题的,因为会有多个main函数。一般是没有人这么做的,或者说熟手就不会了,但是新手有时候不清楚就真的带上了。这个会不会出现问题,我们下一篇来介绍使用的时候看看。
    那么最后你将源文件中的头文件和这个lib文件放在其他项目里就可以使用了。如果你最终给别人,请使用Release版本生成后给别人哦。