您的位置:首页 > 编程语言 > C语言/C++

C++之动态链接库和静态链接库归纳…

2015-12-03 11:17 459 查看
最近工作中接触到了C++动态链接库,一开始搞不明白,在网上查阅了很多资料,现在对这些知识进行归纳总结。

运行平台:win7操作系统

使用工具:VS2013

一.动态链接库的创建和调用

1.
动态链接库的创建

打开VS2013,然后一次点击”FILE->New->Project”,在弹出对话框中选择”Visual C++->Win32 Console Application”,输入名称”Funcs”并修改工程路径,点击”OK”按钮,在弹出对话框中点击”Next”按钮,接下来在设置界面选上”DLL”和”Empty project”两项,再点击”Finish”按钮完成工程的创建。

在新建的工程中添加头文件”funcs.h”,并在该文件中输入如下内容:

class _declspec(dllexport) myFuncs

{

public:

static double Add(double a,double b);

static double Subtract(double a,double b);

static double Multiply(double a,double b);

static double Divide(double a,double b);

};

该文件声明了一个类,类名为myFuncs,并用修饰符”_declspec(dllexport)”来修饰,该修饰符的意思是声明该类为导出类,可供外部调用;如果头文件中存在函数,在函数类型和函数名之间加上该修饰符即可。

在新建的工程中添加类的实现文件”funcs.cpp”,并输入如下内容:

#include “funcs.h”

double myFuncs::Add(double a,double b)

{

Return (a+b);

}

double myFuncs::Subtract(double a,double b)

{

Return (a-b);

}

double myFuncs::Multiply(double a,double b)

{

Return (a*b);

}

double myFuncs::Divide(double a,double b)

{

If(0==b)

Return 0;

Return (a/b);

}

点击”BUILD->Build Solution”进行编译,编译通过的话,将工程切换至Release状态,再点击”BUILD->Build Solution”进行编译。此时一个简单的动态链接库创建完成,在目录”Funcs\Release”下就可以找到”Funcs.dll”和”Funcs.lib”文件。

2.
动态链接库的调用

新建一个C++空的控制台应用程序,工程命名为”UseFuncs”,添加文件”main.cpp”.

将”funcs.h”,”funcs.dll”和”funcs.lib”拷贝到工程UseFuncs的当前目录(即“UseFuncs\UseFuncs”)下,在”main.cpp”文件中输入如下内容:

#include

#include “funcs.h”

#pragma comment(lib,”funcs.lib”)

Using namespace std;

void main()

{

double a=13.6;

double b=25.2;

cout<<”a+b=”<<myFuncs::Add(a,b)<<endl;

cout<<”a-b=”<<myFuncs::Subtract(a,b)<<endl;

cout<<”a*b=”<<myFuncs::Multiply(a,b)<<endl;

cout<<”a/b=”<<myFuncs::Divide(a,b)<<endl;

System(“pause”);

}

点击上方右三角进行编译,即可得出结果。这种调用不需要进行配置,然而却需要将.h,.dll和.lib三个文件拷贝到程序的当前目录下。如果在一个很大的工程中,一个动态链接库往往会被很多程序调用,如果一一拷贝,不仅费力,凌乱,还会产生一个动态链接库的多个副本。实际工程中一般都会指定固定的位置分别集中存放上述三种文件,然后开发程序时配置工程的相关路径,并在程序中包含头文件,就可以使用动态链接库中的函数或类了。

为了便于说明,我在E盘的目录下新建三个文件夹”head”,”dll”和”lib”,并将”funcs.h”拷贝到”head”中,将”funcs.dll”拷贝到”dll”中,将”funcs.lib”拷贝到”lib”中。接下来介绍如何进行配置:

①.添加工程头文件的搜索路径

依次点击”PROJECT->UseFuncs Properties”,在弹出的对话框中依次选择”Configuration Properties->VC++ Directories”,在右边就可以找到”Include Directories”这一项,进入编辑框后输入头文件的路径:E:\head,此处不需要加入引号和分号,然后保存;

②.添加工程动态链接库的搜索路径

依次点击”PROJECT->UseFuncs Properties”,在弹出的对话框中依次选择”Configuration Properties->Debugging”,在右边就可以找到”Environment”这一项,进入后输入:PATH=E:\dll,然后保存;

③.添加工程静态链接库的搜索路径

依次点击”PROJECT->UseFuncs Properties”,在弹出的对话框中依次选择”Configuration Properties->VC++ Directories”,在右边就可以找到”Library Directories”这一项,进入编辑框后输入:E:\lib,然后保存;

④.添加工程依赖库

依次点击”PROJECT->UseFuncs Properties”,在弹出的对话框中依次选择”Configuration Properties->Linker->Input”,在右边找到”Additional Dependencies”(第一项)这一项,进入编辑框后输入:funcs.lib,然后保存。你应该已经发现上面的代码中存在语句:#pragma comment(lib,”funcs.lib”),当时未讲解它的意思,并不是因为遗忘,这句代码的意思就是添加工程依赖库”funcs.lib”。也就是说,如果你添加了这行代码,就不需要进行添加工程依赖库的配置,反之如果你进行了添加工程依赖库的配置,则不需要这行代码。

好了,配置完成,接下来在工程中添加”main.cpp”文件,输入上述代码,按下F5键,程序就可以调用动态链接库里的函数了。此外,值得注意的是:程序在”Debug”状态下配置后编译通过,但切换到”Release”状态后还需要进行一次上述配置。

二.静态链接库的创建和调用

1.
静态链接库的创建

打开VS2013,然后一次点击”FILE->New->Project”,在弹出对话框中选择”Visual C++->Win32 Console Application”,输入名称”Funcs”并修改工程路径,点击”OK”按钮,在弹出对话框中点击”Next”按钮,接下来在设置界面选上”Static library”,再点击”Finish”按钮完成工程的创建。

在新建的工程中添加头文件”funcs.h”,并在该文件中输入如下内容:

class myFuncs

{

public:

static double Add(double a,double b);

static double Subtract(double a,double b);

static double Multiply(double a,double b);

static double Divide(double a,double b);

};

静态链接库不需要添加修饰符”_declspec(dllexport)”;

在新建的工程中添加类的实现文件”funcs.cpp”,输入的内容和创建动态链接库时出入的内容一样;

点击”BUILD->Build Solution”进行编译,编译通过的话,将工程切换至Release状态,再点击”BUILD->Build Solution”进行编译。此时一个简单的静态链接库创建完成,在目录”Funcs\Release”下就可以找到”Funcs.lib”文件。

2.
静态链接库的调用

静态链接库调用的配置和动态链接库的配置一样,不同的是静态链接库调用少一个文件,在此不再赘述,操作时参考上述内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: