介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用
首先介绍一下链接库:链接库分为动态链接库和静态链接库两种
LIB是静态链接库,在程序编译连接的时候是静态链接,其相应的文件格式是.lib。
即当程序採用静态链接库的时候。.lib文件里的函数被链接到终于的可运行文件里。由于应用程序所需的所有内容都是从库中复制了出来。所以静态库本身并不须要与可运行文件一起发行。
DLL是动态链接库,在程序运行的时候被调用,其相应的文件的格式是.dll。
即当程序採用动态链接的时候。.dll文件里的函数并没有被链接到可运行文件里。可运行文件仅仅是保存了函数的地址信息。可是动态库必须和应用程序一起公布。
以下解说一下动态库和静态库在VC6.0中的用法
先来解说静态库的创建和用法
首先建立一个Win32 Console Static Libraryproject名字为Max_Func。
在project中加入名字为Max_Func.h的头文件。
代码例如以下:
int max(int a,int b);
在project中加入名字为Max_Func.cpp的源文件。
代码例如以下:
#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//以下的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"
int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?
a:b;
}
在project中加入头文件Macro_Define.h
代码例如以下:
#define COPYRIGHT "Scripted by WP."
在project中加入头文件Global_Value.h
代码例如以下:
int GLOBAL_NUM = 0;
在project中加入头文件Extern_Value.h
代码例如以下:
extern int GLOBAL_NUM;
编译上述的project文件得到Max_Func.lib文件。
对外开发的文件为Max_Func.lib和Max_Func.h.假设是项目合作开发的话Macro_Define.h,Global_Value.h。Extern_Value.h文件是共同拥有的。
如何加入到project中呢?以下介绍几种方法。并用某一种方法展示一下.
第一种加入方法是#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")来加入。
当中"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib"为Max_Func.lib文件的绝对路径。
当然也能够用相对路径。
然后在你使用.lib中函数的文件里加入#include "Macro_Define.h"就可以。
另外一种方法是直接将Max_Func.lib文件加入到要使用的project中。
即在project上选择Add Files to Project.....来完毕。
然后在你使用.lib中函数的文件里加入#include "Macro_Define.h"就可以。
第三种方法是VC6.0中的Tools/Options的Library Files 加入.lib文件的查找路径。
而且在Project/Setting的Link标签的
object/library modules 中加入静态库的名字。
然后在你使用.lib中函数的文件里加入#include "Macro_Define.h"就可以。
以下的程序利用的是第一种方法
#include <iostream.h>
#include "Macro_Define.h"
#include "Extern_Value.h"
#include "Max_Func.h"
#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")//增加静态库
void main(void)
{
cout<<COPYRIGHT<<endl;
cout<<max(19,49)<<endl;
cout<<max(200,100)<<endl;
}
上面的过程就可以调用静态库中的函数了。
有什么不明确的能够在以下留言。
以下解说动态库的创建和用法
创建一个动态链接库的project名字为Max_Func
在project中加入名字为Max_Func.h的头文件。
代码例如以下:
int max(int a,int b);
在project中加入名字为Max_Func.cpp的源文件。
代码例如以下:
#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//以下的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"
int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?a:b;
}
在project中加入头文件Macro_Define.h
代码例如以下:
#define COPYRIGHT "Scripted by WP."
在project中加入头文件Global_Value.h
代码例如以下:
int GLOBAL_NUM = 0;
在project中加入头文件Extern_Value.h
代码例如以下:
extern int GLOBAL_NUM;
上述的代码编译生成文件Max_Func.dll
以下还须要生成一个导出DLL的文件的Max_Func.lib文件。
须要建立Max_Func.def增加project
内容例如以下:
LIBRARY Max_Func_1//说明要导出的动态库名字
EXPORTS max //导出的函数
DLL文件的增加方式和LIB的差点儿一样,由于都是将格式为lib的文件增加到project。须要注意的是须要将DLL文件增加到project文件夹下或者可以搜索到的地方。在程序的执行过程将dll文件里的函数进行调用。project通过函数的地址在dll中找到
要调用的函数。
介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用的更多相关文章
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...
- vc下的静态链接库与动态链接库(一)
一.静态库与动态库的区别 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Lib ...
- linux c静态链接库与动态链接库
库函数是我们编程的时候经常用到的,我们协作编程的时候可以将常用的函数封装成库供大家使用,这样能够提高大家的工作效率.对于库函数,它分为动态链接库和静态链接库.对于静态链接库我们必须是连接到可执行文件中 ...
- Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)
本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接库的makefile. 这些makefile都很简单,一般都是一看就会用,用法也很容 ...
- Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...
- linux静态链接库与动态链接库详解
一顺便说说了哦 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(e ...
- [拾零]C/C++_代码复用的实现_静态链接库_动态链接库_使用.def导出
1 静态链接库 1.1 创建静态链接库: 1.在VC6中创建项目:Win32 Static Library 2.在项目中创建两个文件:xxx.h 和 xxx.cpp 3.编译 1.2 使用静态链接库 ...
- Eclipse C++配置静态链接库和动态链接库
转:https://blog.csdn.net/iteye_20658/article/details/82650699 1.动态库: 一.创建动态链接库1.创建工程new->project-& ...
- Linux下 静态链接库 和 动态链接库
先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特 ...
随机推荐
- POJ 1195 Mobile phones【 二维树状数组 】
题意:基础的二维数组,注意 0 + lowbit(0)会陷入无限循环----- 之前做一道一维的一直tle,就是因为这个-------------------------- #include<i ...
- GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导
Code: #include<cstdio> using namespace std; const int maxn=4000005; const int R=4000002; const ...
- [SCOI2012]喵星球上的点名(树状数组+后缀数组)
我们把所有的名,姓,询问都拼起来构成一个新的长串,然后跑一边SA.排完序后对于每一个询问,我们可以二分求出它所对应的区间(即满足这个区间的前缀都是这个询问串).然后问题就转化为很多区间问区间出现过的不 ...
- BZOJ 2741 L (可持久化01Trie+分块)
题目大意:给你一个序列,共有$q$个询问,每次询问区间$[L,R]$内最大连续字段异或和,强制在线,$n<=12000,m<=5000$ 有个细节没处理好$WA$了好久..还有一次$ans ...
- 学习Keras:《Keras快速上手基于Python的深度学习实战》PDF代码+mobi
有一定Python和TensorFlow基础的人看应该很容易,各领域的应用,但比较广泛,不深刻,讲硬件的部分可以作为入门人的参考. <Keras快速上手基于Python的深度学习实战>系统 ...
- C语言修改文件某部分内容
两种方法 1.全部读入内存 修改后重新存入文件 2.边读边写到另一新建文件 要修改的部分修改后存入新建文件 其他部分原封不动写入 写完删掉原先文件 将这个新的改为删掉那个的名字 方法一 读入内存修改 ...
- 洛谷 P3146 [USACO16OPEN]248
P3146 [USACO16OPEN]248 题目描述 Bessie likes downloading games to play on her cell phone, even though sh ...
- Android体验高扩展艺术般的适配器
前言 本篇文章带大家体验一下一种具有扩展性的适配器写法. 这个适配器主要用于Item有多种的情况下.当然仅仅有一种类型也是适用的 实现 毫无疑问我们要继承BaseAdapter,重写getCount, ...
- Java - Thinking in Java 第2章 一切都是对象
Java是"纯粹"的面向对象的语言. 操作的标示符是对象的一个引用, new是创建一个对象. 存储位置: 寄存器\堆栈(引用)\堆(new)\常量存储(程序代码内部)\非RAM存储 ...
- Linux 命令行光标快速选中移动快捷键
Ctrl+Alt+T 打开终端一些常用的终端快捷键:Ctrl+L 清空屏幕(功能相当于命令clear)Ctrl+U 剪切文本直到行的起始(可以用于清空行)Ctrl+K 剪切文本直到行的末尾Ctrl+Y ...