静态库
编译链接的过程
如果我们想把我们的某一个功能给别人用但是不想让别人知道我的源码时,我们可以把obj文件和头文件复制给别人用
写好头文件和两个函数
之后生成obj文件,将头文件和obj文件放到新项目中调用即可
如果想让生成的obj文件能给c语言用,前面加上extern "C"
即可
但是当我们功能比较多,一堆obj比较麻烦,这时候就出现了静态库,将obj集合在一起
新建静态库生成即可
使用命令导入静态库#pragma comment(lib,"lib.lib")
正常执行
缺点:
1维护困难:如果.lib更新,使用的工程如需更新,则必须重新编译。
2磁盘冗余:如果很多工程使用,就要拷贝很多份.lib文件,这些lib都是一样的
3无法很好的同时兼容C和C++
4其他语言无法使用
动态库
创建动态链接库的项目,生成lib和dll
头文件加入__declspec(dllexport)
说明是导出,当导入改成__declspec(dllimport)
导入直接将lib和dll放入项目下,导入lib文件即可
但是每次都要改很麻烦
利用宏来做一个开关,在宏的设置工程中建立一个头文件MyDef.h
由于我们生成DLL的时候需要导入,所以定义一下即可;
或者预处理器添加MYDLL_EXPORT
静态调用步骤:
1新建应用工程。
2通过编译器供给应用程序关于DLL的名称,以及DLL函数的链接参考(.h文件)。这种方式不需要在程序中用代码将DLL加载到内存。
3将DLL和LIB文件拷贝到工程目录下,最好在工程的DEBUG目录下也拷贝一份。
4将lib文件添加到工程
a方式一:项目>>属性>>链接>>依赖项>>lib名称
b方式二:拖入到项目
5添加头文件>>直接调用头文件中的函数即可。