zoukankan      html  css  js  c++  java
  • 介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用

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

    LIB是静态链接库,在程序编译连接的时候是静态链接,其对应的文件格式是.lib。即当程序采用静态链接库的时候,.lib文件中的函数被链接到最终的可执行文件中,因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

    DLL是动态链接库,在程序运行的时候被调用,其对应的文件的格式是.dll。即当程序采用动态链接的时候,.dll文件中的函数并没有被链接到可执行文件中,可执行文件只是保存了函数的地址信息。但是动态库必须和应用程序一起发布。

    下面讲解一下动态库和静态库在VC6.0中的使用方法

    先来讲解静态库的创建和使用方法

    首先建立一个Win32 Console Static Library工程名字为Max_Func。

    在工程中添加名字为Max_Func.h的头文件。

    代码如下:

    int max(int a,int b);

    在工程中添加名字为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;
    }

    在工程中添加头文件Macro_Define.h

    代码如下:

    #define COPYRIGHT "Scripted by WP."

    在工程中添加头文件Global_Value.h

    代码如下:

    int GLOBAL_NUM = 0;

    在工程中添加头文件Extern_Value.h

    代码如下:

    extern int GLOBAL_NUM;

    编译上述的工程文件得到Max_Func.lib文件。

    对外开发的文件为Max_Func.lib和Max_Func.h.如果是项目合作开发的话Macro_Define.h,Global_Value.h,Extern_Value.h文件是共有的。

    怎样添加到工程中呢?下面介绍几种方法。并用某一种方法展示一下.


    第一种添加方法是#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文件添加到要使用的工程中。即在工程上选择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;
    }

    上面的过程即可调用静态库中的函数了。


    有什么不明白的可以在下面留言。


    下面讲解动态库的创建和使用方法

    创建一个动态链接库的工程名字为Max_Func

    在工程中添加名字为Max_Func.h的头文件。

    代码如下:

    int max(int a,int b);

    在工程中添加名字为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;
    }

    在工程中添加头文件Macro_Define.h

    代码如下:

    #define COPYRIGHT "Scripted by WP."

    在工程中添加头文件Global_Value.h

    代码如下:

    int GLOBAL_NUM = 0;

    在工程中添加头文件Extern_Value.h

    代码如下:

    extern int GLOBAL_NUM;

    上述的代码编译生成文件Max_Func.dll

    下面还需要生成一个导出DLL的文件的Max_Func.lib文件。

    需要建立Max_Func.def加入工程

    内容如下:

    LIBRARY Max_Func_1//说明要导出的动态库名字

    EXPORTS  max //导出的函数

    DLL文件的加入方式和LIB的几乎一样,因为都是将格式为lib的文件加入到工程。需要注意的是需要将DLL文件加入到工程目录下或者能够搜索到的地方。在程序的运行过程将dll文件中的函数进行调用。工程通过函数的地址在dll中找到

    要调用的函数。


  • 相关阅读:
    Springboot使用外置tomcat的同时使用websocket通信遇到的坑
    SpringBoot 使用 ApplicationContextAware实现类出现NullPointException的问题
    Java搭建微信公众号的服务器配置
    axios异步访问后台 @RequestParam 获取参数 HTTP Status 400
    springboot启动失败的问题('hibernate.dialect' not set)
    Java Optional 类
    ubuntu 18.04 解决无法联网的问题
    ubuntu安装rpm格式文件方法
    简述vue中父子组件是怎样相互传递值的(基础向)
    实现网站中英文切换的三种方法
  • 原文地址:https://www.cnblogs.com/BBOOT/p/3812667.html
Copyright © 2011-2022 走看看