静态链接库

来源:互联网 发布:mac系统文件夹重命名 编辑:程序博客网 时间:2024/06/17 06:12

概念:

CLR(公共语言运行时)对于现在的C++而言现在可以创建2种形式的C++代码,一种是本地代码(Native),一种是托管代码,如下图的Visual studio 2012(习惯用Visual studio开发环境了,毕竟是主要写C#的人):

当让我使用C++的目的在于编写跟WindowsApi(直接跟操作系统打交道的代码实现一些特殊的功能),所以不可否认的选择Win32.

静态链接库(.lib):首先明白一个概念性的东西,所有的win32程序编译生成之后都会生成一个.exe的可执行文件,静态链接库,顾名思义就是编译的时候直接将.lib的代码编译进.exe可执行文件。

创建静态库项目(这里我选择的是visual studio 2012来创建)

  1. 在菜单栏上,选择“文件”“新建“项目”

  2. 在“新建项目”对话框左窗格中,展开“已安装”、“模板”、“Visual C++”,然后选择“Win32”。

  3. 在中间窗格中,选择“Win32 控制台应用程序”

  4. 在“名称”框中为项目指定名称,例如,MathFuncsLib。 在“解决方案名称”框中为解决方案指定一个名称,例如 StaticLibrary。 选择“确定”按钮。

  5. “Win32 应用程序向导”对话框的“概述”页上,选择“下一步”按钮。

  6. 在“应用程序设置”页上的“应用程序类型”下,选择“静态库”。

  7. 在“应用程序设置”页上的“附加选项”下,清除“预编译头”复选框。

  8. 选择“完成”按钮创建项目。

给类库项目添加类代码

1.右键类库项目选择,类向导


2.选择添加类。(里面的内容我们按需填写:类名,头文件名,基类,是公有还是私有还是保护等)


3.确定这样就创建好了,我们写上自己的代码编译就可以了。会编译成.lib文件这就是我们的静态类库

静态类库的使用(有2种方式)

通过Visual Studio 2012IDE集成开发环境采用引用的方式:在同一个解决方案下新建一个Win32控制台应用程序,我们右键选择引用

,然后在弹出的对话框里面添加引用(然后勾选上你要添加的类库即可)


若要引用 MathFuncsLib.h 头文件,必须修改包含的目录路径。 在 MyExecRefsLib“属性页”对话框中,依次展开“配置属性”节点和“C/C++”节点

,然后选择“常规”。 “附加包含目录”旁边,指定 MathFuncsLib 目录的路径或浏览至该目录。


剩下的就是使用类库项目了,使用类库里面的方法跟使用本地的方法是一样的。

使用配置文件或者拖拽的方式或者编译预处理宏的方式

对于第三方的静态类库,开发者不会给你提供他们的源码,他们提供给你的只有.h和.lib文件。

首先你要将相应的.h和.lib文件拷贝到你的项目下

(注意:有解决方案的生成的时候.lib文件在你的解决方案根目录下面的Debug或Release文件夹下)

拖拽的方式:首先我们将.h放置在我们的项目下面,然后拖拽.lib文件到我们的项目下面的Resource Files文件夹下,

这样我们就可以使用静态类库了。


配置文件的方式:(拷贝同上:.h和.lib文件)

右键项目属性,配置文件属性,选择链接器(Linker),选择Input,然后在右边的附加依赖项里面添加所依赖的.lib库的

相对路径(例如:..\Debug\Lib.lib)就可以了,然后在项目里面引用例如:#include "Math.h"

就可以使用类库里面的方法了。如图所示:


为什么每次都要引用.h呢?因为C++是一个顺序执行语言,任何函数的定义或者调用都必须在声明之后

,也就是首先要告诉编译器,函数什么样子的!

通过代码的方式来定义链接器(感觉这种方式还方便一点)

定义一个编译指示器:在要项目的源文件里面定义

#pragma comment( lib, "..\\Debug\\Lib.lib" )  //指定本文件生成的.obj文件应与Lib.lib一起链接。

#include "stdafx.h"#include "Math.h"#include <iostream>using namespace std;#pragma comment(lib,"..\\Debug\\Lib.lib")int _tmain(int argc, _TCHAR* argv[]){Math myMath;int a=myMath.Add(10,12);cout<<a<<endl;return 0;}
另外补充一句:

在类库项目里面我们还可以使用以下的语法

extern "C" int Add(int,int);//声明一个以C语言方式编译、连接的外部函数




原创粉丝点击