【VC++DLL动态链接库编程】VC++静态库编译(3)

在讲解动态库之前,先讲一个静态库的例子,使我们对库有一个概念。

在E:\core\src\目录下,创建一个静态库(库工程):

菜单栏:文件-->新建-->项目,如图所示:




此时为一个空静态库,如图所示:


首先添加一个类:菜单栏: 项目-->添加类-->C++类, 出现如下图示,在添加类名:Person,后面的.h文件和.cpp文件名会自动出现,无需人工填写。


点击完成之后,在头文件下面出现Person.h和源文件下Person.cpp。如图所示:



这里只做演示:在.cpp文件下,添加以下三句话,前两句为引用:


编译一下staticLib,即菜单栏:生成-->生成解决方案(B),则生成了静态库,如下所示:


此时我们来改变输出目录路径,即编译后的.lib文件所在的路径。在staticLib项目处右击属性,把输出点到库管理,或者改变常规,如图所示:


确定之后,core目录下,即与src同一级目录下出现lib文件,如图所示:


再重新编译staticLib,如图所示:


到此为止,静态库(库工程)编译成功,创建了一个静态库,得有一个(应用工程)程序去调用它。现在我们再新建一个项目,调用这个库,即把这个静态库应用起来。(讲库工程和应用工程放在同一个VC目录下,即在E:\core\src\)

新建一个应用工程(调用静态库)的项目:

文件-->新建-->项目,弹出如下图示:




在.cpp文件下,添加#include “Person.h”,将Person.h文件引用进来,如图所示:


红斜杠,表示找不到Person.h的头文件,此处是声明,若是编译的话,就会报错,如图所示:

解决办法,就是对TestStatic进行属性配置,即在TestStaitic项目处右击,选择属性,弹出如下图:


编译,即生成-->生成解决方案(B),此时开始如下错误:


报错显示:找不到Person的构造函数和析构函数。所以需要链接到Person的定义,即链接到Person的定义文件。如下:



设断点调试看看效果:


点击“本地Windows调试器”,进行调试,其结果如下:


静态库的引用:除了项目设置中的属性进行引用;还可以选择通过代码进行引用,即通过预编译的指令:#pragma comment(lib,"staticLib")这段代码只能放在cpp或c文件中,不能放在.h文件中,以防多次引用。


执行文件(.exe)会变大,因为静态库都会被引用过来,而且在执行的时候不再需要原来的库了。静态库直接编译到执行文件中。

添加两句话,我们来演示一下效果:


编译TestStatic,将静态库编译到exe文件里,然后双击.exe文件,如图所示的红框:


效果如图所示:


总结:

从上面的例子至少使我们明白,静函数到底是什么回事,对库有一个模糊认识:

(1)编写库的程序和一般的程序没有什么大的区别,只是库程序不能单独执行;

(2)库提供一些可以给别的程序调用的东东,别的程序要调用必须以某种方式指明它要调用之。


以上从静态链接库分析而得到的对库的概念,可以直接引申到动态链接库中,动态链接库与静态链接库在编写和调用上的不同体现在库的外部接口定义及调用方式稍有些差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值