c语言如何调用lib和dll文件,菜鸟笔记:c/c++中关于lib与dll文件的生成与使用。

当我们的软件大到一定程度的时候,就要考虑将软件划分为多个模块,从而降低软件的复杂度以及复用部分资源。模块的主要表现形式有很多种,其中最常用的就是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声明)。

写得很匆忙,可能有不少错误的地方,而且对于新手来说很多细节也没说清楚(网上搜一下相关概念就行了)。希望能得多大虾们的指正与补充,也希望本文能帮助到一些新手。

部分内容:  用C 语言编程时,通常要建立一些用户函数。如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令将其包含到源程序之,以提高编程效率。但在特定的程序一般仅使用这些函数的一部分,若用上述方法包含所有函数,编译器在编译的时候会把所有包含进的函数都进行编译,这无疑会使源程序变得庞大而难于理解,并会影响执行效率。建立用户目标模块库(lib文件)可以解决这个问题,你可以事先把有特定功能的通用的子函数集编译完成后生成的obj文件打入lib文件,当链接器tlink.exe在进行链接操作时,便只会把程序内部用到的通用函数所在的obj文件链接进来(已验证:不能定位到具体函数),这样生成的obj文件便会更精简,生成的exe文件也更小。   其实,一个lib文件是obj文件的集合。当然,其还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。我们可以通过tlib.exe(在tc2.0下的根目录)来对lib文件进行操作,你可以把自己生成的obj文件通过tlib命令加入到一个lib文件,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。明白了lib文件的大致结构以及对它的具体操作,在学习C语言的过程,就会又多了一个切入点对C语言具体实现进行研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值