在Visual Studio上编写自己的第三方库

本文是笔者参考网上资料整理而来,如有错误请指正。

一、前言

最近在和学长一起做一个项目,在程序移植过程中因版本问题出现程序不可复用的现象。所以想着把自己的程序封装成一个静态库。顺便学习一下动态库的创建和使用。稍后会在ubuntu上实现一下,本文是自己参考别人的博客之后总结的,如有错误,还望指正。文中图片非原创,从下面参考博文截得。在此感谢作者的付出
参考文章如下:
http://www.cnblogs.com/skynet/p/3372855.html

二、第三方库

简单的说第三方库就是前辈们写的封装好的代码,拿来简单配置一下你就可以用了。这样有利于代码的复用,防止大家都在造车轮。在C++编程中,其实我们可以讲自己写过的程序(排序算法,字符串操作,分类器训练啥的)封装成库,这样可以方便日后的使用。C++中主要有两种库:静态链接库和动态链接库。为了说明二者的区别,请见下图。

在Visual Studio上编写自己的第三方库_第1张图片

所以很明显的看出,二者的区别在于链接时候的处理。总结就是,静态库把.h .cpp和其中用到的所有其他的库都封装成一个二进制的可执行文件输出。动态库则是只把.h, .cpp封装成一个二进制可执行文件。当然实际要更复杂一些。后面会讲到。

1. 静态链接库

进过汇编以后程序会变成一个.o文件(可执行文件)。在链接阶段,linux中的ar工具和windows上的lib.exe会将这个.o文件和其他库文件封装在一起,从而形成一个完整的.lib库文件。
优点: 整体的封装使得程序移植性变好,因为需要的所有东西都在这个文件中。
缺点: 坏处也很明显,可执行程序执行时是拷贝在内存中的,那么如果多个程序使用这个静态库,那么内存中就会有多个副本,是一种内存空间的浪费。如下图。另个致命的问题在于,一旦需要更新库,就需要将库重新生成,造成一个小更行便要重装整个软件的后果。
在Visual Studio上编写自己的第三方库_第2张图片

2. 动态链接库

为了解决上面的问题,于是便有了动态链接库这一种封装形式,与其说封装不如说一种共享的形式。原理很简单,当汇编之后,会得到一个.o文件。注意不同之处来了, 链接过程中,不会讲相关的其他库进行关联封装,只是对库和程序建立编号和索引,这些信息保存在一个同名的.lib文件中(与上面的.lib文件有本质区别)最后生成一个.dll文件。只有当运行时,才会将相关的库的可执行文件导入内存,而且只导入一次,之后便共享。如下图。
优点: 动态链接库解决了内存浪费的问题,而且更新时,只需要更新相应的.dll文件即可,方便。
缺点: 但是存在移植性差的,.dll丢失的问题。
在Visual Studio上编写自己的第三方库_第3张图片

三、Windows上创建并使用静态链接库

1. 创建

  1. 打开vs2010,新建一个project,选win32控制台,填写好project名称和Solution名称。
  2. 进入“Win32向导”,点击“下一步”。
  3. 进入“应用程序设置”,选择“静态库”,去除“预编译头”的勾选。点击“完成”。
  4. 目前工程是一个空的工程,如下图。
    在Visual Studio上编写自己的第三方库_第4张图片
  5. 在头文件中创建你所要编写的静态库头文件,例如StaticSum.h。在源文件中创建对应的源文件,例如StaticSum.cpp。如图。
    在Visual Studio上编写自己的第三方库_第5张图片
  6. 在两个文件中编写你要编写的库的代码,之后点击“生成”->“生成解决方案”就完成了。之后再工程的文件夹中出现“Debu1.g”的子文件夹,同时在解决方案的文件夹下面的“Debug”文件夹中出现“StaticSum.lib”的文件。这个就是生成的静态库。

2. 使用

1)简单使用:
  1. 新建一个project,选择win32控制台程序,建立一个空项目。
  2. 将上面工程文件夹下的“StaticSum.h”文件和解决方案文件夹下的“Debug”文件夹内的”StaticSum.lib”拷贝到新建project的目录下即可。
  3. 在新project的头文件中添加“StaticSum.h”文件。
  4. 使用#pragma comment(lib, “StaticSum.lib”),将静态库直接添加进去,就可以使用了。

注意:这种方式一旦库比较多,导致project目录下文件过多,管理困难。故而还是使用下面正规的方法比较好。

2)正规方法:
  1. 新建立一个Project,创建win32控制台,一个空的项目。
  2. 配置项目属性,工具栏->“项目”->“属性”。如下图。
    在Visual Studio上编写自己的第三方库_第6张图片
  3. 在“VC++”目录中的包含目录和库目录中添加静态库的头文件和.lib文件。在“C/C++”的“附加包含目录”中添加静态库头文件。在”连接器”中的“常规”中的“附加库目录中”添加静态库路径。在”输入中”添加“StaticSum.dll”。

你可能感兴趣的:(C++)