一、windows下的库文件
window下的库文件可以分为静态库文件、动态库文件、MFC规则动态库文件、MFC扩展动态库文件
二、静态库
1.静态库文件
函数和数据被编译进一个二进制文件扩展名(.lib),运行时不需要存在,编译时会被嵌入到可执行文件中去(exe,dll); 也可利用vc的命令行工具经行生成 cl -c *.obj -I“path”,通过这个对源文件进行编译,然后利用link -lib -libpath“libpath”,来连接生成.lib库文件的生成;
2、静态库的使用,如果生成的静态库没有在当前工程的目录下,可以有两种的解决方式,一 一种是通过对工程进行设置库文件的搜索路径,或者可以使用 #pragma comment(lib,"name.lib")经行静态库的引入;当然在使用的时候需要包含对应的头文件进行函数的声明;
3、注意情况,当在C++的文件中使用C的静态库的时候需要在函数的声明的前面加上extern "C",原因是,当用C的编译器进行生成静态库的时候,采用的编译方式是c的编译方式,那么在.lib文件中的函数名称是C方式的函数名称,那么在C++的文件中在函数的声明前面不加上extern "C",就会按照C++的编译方式进行编译,会有名字改遍存在,这样当进行连接的时候,就在对应的.lib文件中找不到对应的函数,产生连接错误;
三、动态库
windows下动态库会有两个文件,一个是引入库文件(.lib),一个.dll文件,动态库的.lib文件和静态库的.lib文件有着本质的区别,引入库文件中成放的是dll导出函数和变量的符号名称,而dll文件中包含dll的实际函数和数据;
dll在连接的时候不需要,在运行的时候会需要,程序会去系统指定的目录下,和path变量中指定的目录下去查找;包括windows目录,以及windows/system32,windows/system;在连接时需要的文件是引入库文件(.lib),引用方式同静态库的引入方式;当程序运行的时候,将dll映射到进程的地址空间去,然后访问dll的导出函数
函数的导出方式有两种,一种是.def文件,注:此种方式导出的函数名称,就是add、mul,也不会因为函数的调用方式发生改变而改变
另外的一种方式是使用,__declspe