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

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


    运行平台:win7操作系统

 

    使用工具:VS2013


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

1. 动态链接库的创建

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

C++之动态链接库和静态链接库归纳总结在新建的工程中添加头文件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)来修饰,该修饰符的意思是声明该类为导出类,可供外部调用;如果头文件中存在函数,在函数类型和函数名之间加上该修饰符即可。

C++之动态链接库和静态链接库归纳总结在新建的工程中添加类的实现文件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);

}

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

2. 动态链接库的调用

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

funcs.hfuncs.dllfuncs.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盘的目录下新建三个文件夹headdlllib,并将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. 静态链接库的创建

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

C++之动态链接库和静态链接库归纳总结在新建的工程中添加头文件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)

C++之动态链接库和静态链接库归纳总结在新建的工程中添加类的实现文件funcs.cpp,输入的内容和创建动态链接库时出入的内容一样;

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

2. 静态链接库的调用

静态链接库调用的配置和动态链接库的配置一样,不同的是静态链接库调用少一个文件,在此不再赘述,操作时参考上述内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值