首先介绍一下链接库:链接库分为动态链接库和静态链接库两种

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中的建立和使用的更多相关文章

  1. linux下静态链接库和动态链接库

    关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...

  2. vc下的静态链接库与动态链接库(一)

    一.静态库与动态库的区别 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Lib ...

  3. linux c静态链接库与动态链接库

    库函数是我们编程的时候经常用到的,我们协作编程的时候可以将常用的函数封装成库供大家使用,这样能够提高大家的工作效率.对于库函数,它分为动态链接库和静态链接库.对于静态链接库我们必须是连接到可执行文件中 ...

  4. Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)

    本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接库的makefile. 这些makefile都很简单,一般都是一看就会用,用法也很容 ...

  5. Linux环境下c语言静态链接库和动态链接库创建和使用

    库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...

  6. linux静态链接库与动态链接库详解

    一顺便说说了哦  通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(e ...

  7. [拾零]C/C++_代码复用的实现_静态链接库_动态链接库_使用.def导出

    1 静态链接库 1.1 创建静态链接库: 1.在VC6中创建项目:Win32 Static Library 2.在项目中创建两个文件:xxx.h 和 xxx.cpp 3.编译 1.2 使用静态链接库 ...

  8. Eclipse C++配置静态链接库和动态链接库

    转:https://blog.csdn.net/iteye_20658/article/details/82650699 1.动态库: 一.创建动态链接库1.创建工程new->project-& ...

  9. Linux下 静态链接库 和 动态链接库

    先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特 ...

随机推荐

  1. iptables 简单介绍及应用 Linux防火墙

    iptables 即 Linux防火墙 的简单介绍及使用 iptables生效位置如下图: 其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省 ...

  2. ueditor 编辑器,自定义图片上传

    <div> <h1>完整demo</h1> <form method="post" name="form"> & ...

  3. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  4. BZOJ 1050 [HAOI2006]旅行comf(最小生成树)

    题意 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在该公路上行驶.最后一行包含两个正整数s,t,表示想知道从景点s到 ...

  5. 紫书 例题 11-14 UVa 1279 (动点最小生成树)(详细解释)

    这道题写了好久-- 在三维空间里面有动的点, 然后求有几次最小生成树. 其实很容易发现, 在最小生成树切换的时候,在这个时候一定有两条边相等, 而且等一下更大的那条边在最小生成树中,等一下更小的边不在 ...

  6. 紫书 习题8-11 UVa 1615 (区间选点问题)

    这个点就是贪心策略中的区间选点问题. 把右端点从大到小排序, 左端点从小到大排序. 每次取区间右端点就可以了, 到不能覆盖的时候就ans++, 重新取点 ps:这道题不考虑精度也可以过 要着重复习一下 ...

  7. HDU 2295 Radar 重复覆盖 DLX

    题意: N个城市,M个雷达站,K个操作员,问雷达的半径至少为多大,才能覆盖所有城市.M个雷达中最多只能有K个同时工作. 思路: 二分雷达的半径,看每个雷达可以覆盖哪些城市,然后做重复覆盖,判断这个半径 ...

  8. WIZnet相关产品介绍

    WIZnet  自1998年在韩国创立以来,一致专注研发全硬件TCP/IP协议栈芯片.同一时候开发设计相关网络模块和无线产品,同一时候 WIZnet 鼓舞开源硬件.相关开源硬件产品也已层出不断. 主要 ...

  9. Android Bitmap太大导致ImageView不显示的问题

    今天做我们的智能相冊的项目时,遇到了非常奇妙的问题,当照片太大时,导致ImageView.setImageBitmap不显示,上网上搜了非常多办法.感觉都不是那么靠谱.最后使用了简单粗暴的手段: // ...

  10. OpenCASCADE License FAQs

    OpenCASCADE License FAQs 经常用人问我使用OpenCASCADE开发商业软件是否需要付费,下面从OpenCASCADE的官方网站上截取其回答翻译成中文,官方网址:https:/ ...