一直以来碰到库文件都是个头疼的事情,常常回避之,但越是害怕的东西就越要弄懂它。今天就系统地学习一下,也算是对库文件的使用有了初步的认识。
首先库文件分为静态链接库(.lib)和动态链接库(.dll)文件。库文件是编译过的包含有函数的目标文件,当我们在写程序时,需要用到某个函数时,我们只需要把包含它的库加进来,一起生成可执行文件。
这里要讲到的就是静态库和动态库的区别:静态库,当同时运行许多应用程序并且他们都包含相同的来自同一个库文件的函数时,内存中会有同一个函数的多份拷贝,程序文件自身也有多份拷贝。不同的是动态链接库,程序本身不包含函数代码,只是在运行的时候访问这个函数。
下面说说怎么使用库文件
一.静态链接库
(1)创建静态库文件
lib工程中要包含两个文件
lib.h
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y); //声明为外部的,以C 编译
#endif
lib.cpp(注意这里只能是.cpp文件,不能是.c文件)
#include "lib.h"
int add(int x,int y)
{
return x + y;
}
编译完成之后,你就可以将lib.h和lib.lib文件发布出去,可以供别人使用了。
(2)使用静态库文件
#include "lib.h"
#pragma comment( lib, "lib.lib" ) //除了这种方式添加.lib库文件还可以通过直接在工具-》选项-》目录—》library files菜单里填入库文件路径。
只要在要调用的文件里加上这两句,然后把lib.h,lib.lib这两个文件放到工程文件目录下就可以了!
二.动态链接库
(1)创建动态链接库
dll工程中要包含两个文件
dll.h
#ifndef LIB_H
#define LIB_Hextern "C" int __declspec(dllexport) add(int x, int y);
#endif
dll.cpp
#include "dll.h"
int add(int x,int y)
{
return x + y;
}
编译完就可以生成dll.dll和dll.lib文件了。
(2)动态链接库的调用
调用动态链接库只需要在文件的开头加上这两句,再把dll.dll和dll.lib文件加到工程目录下就可以了。
#pragma comment(lib,"dll.lib") // 告诉编译器与DLL相对应的.lib文件所在的路径及文件名
extern "C" __declspec(dllimport) add(int x,int y); //声明导入函数
点击下图进入投票页面
转载于:https://blog.51cto.com/fangjie/1217614