当我们的软件大到一定程度的时候,就要考虑将软件划分为多个模块,从而降低软件的复杂度以及复用部分资源。模块的主要表现形式有很多种,其中最常用的就是lib和dll文件。下面简单讲一下lib和dll的生成和使用方法。 先讲一下静态链接与动态链接。静态链接是指在编译的时候就把模块的内容加载进来一起编译,这样编出来的exe文件包含了模块的内容,因此会比较大。而动态链接是指程序在运行时去加载模块中所需要的函数,exe文件与模块文件是分离的。一般来说,静态链接用的是lib文件,动态链接用的是dll文件。 下面开始讲如何生成lib和dll文件吧。其实都很简单,以VC为例,先创建对应的工程(lib或dll),如果是lib,给每个需要导出的函数前加上extern修饰就行了,像这样: extern void my_function() {...}。如果是dll,则在函数前加上__declspec(dllexport),如__declspec(dllexport) void my_function{...}。 使用lib也很简单,首先在工程的链接选项里加入你要链接的lib文件,然后在你想用lib里面的函数时,用extern声明一下就行了,比如extern void my_function(),这样编译器遇到my_function这个函数时就会在你指定的lib中查找。另外需要提一下的是,如果lib里面的函数是c写的,那么在c++中使用这些函数的时候需要这样声明: extern "C" {extern void my_function()},这是因为c和c++在生成lib时对函数的命名规则不同,使用extern "C"是告诉编译器要按照C的命名规则来查找函数。 使用dll还是很简单,不过有两种使用方式。一种是使用LoadLibrary在运行时加载dll,然后获得函数的地址再使用。如果我们要大量使用该dll里面的函数时,这种用法是非常不方便的,能不能像使用lib一样使用dll呢?答案是肯定的。dll工程在生成dll文件的同时还会生成一个同名的lib文件,这个lib文件和上面说的lib文件是不同的,可以看作是一个对生成的dll进行描述的文件。我们只要像使用lib一样把dll的lib文件加到工程中,就可以像静态链接那样使用dll里面的函数了(还是需要用extern声明)。 写得很匆忙,可能有不少错误的地方,而且对于新手来说很多细节也没说清楚(网上搜一下相关概念就行了)。希望能得多大虾们的指正与补充,也希望本文能帮助到一些新手。
更多
0
|
|