• C89:论静态链接库和动态链接库


    一.静态链接库

    想要生成静态链接库,只需要生成的.lib库文件和该静态链接库的.h头文件即可

    .h是用来声明所需要的函数名称参数等

    .lib静态库文件包含了源文件

    1.

    首先打开VS,新建Win32控制台应用程序,应用程序类型选择静态库,然后新建了静态链接库项目

    2.

    在源文件文件夹里面添加StaticLib.cpp源文件    在头文件文件夹里面添加StaticLib.h头文件


    3.

    //StaticLib.cpp
    double Add(double a,double b){
    	return a+b;
    }
    
    //StaticLib.h
     
    #pragma once 
     
    extern double Add(double a,double b)
    

    4.

    生成该项目的解决方案得到.lib静态链接库

    5.

    新建另一个Win32项目或者Win32控制台来使用静态链接库

    6.

    使用静态链接库

    //Mian.cpp
     
    //使用静态链接库的头文件
    #include "StaticLib.h"
     
    //使用静态链接库的库文件
    #pragma comment(lib,"StaticLib.lib");
     
    int main(){
     
        double a=Add(1.0,2.0);
        ...
    }
    

    二.动态链接库

    动态链接库分为隐式链接和显式链接,并且DllMain这个函数并不是必需的,它可以用来初始化DLL,有点类似构造函数和析构函数

    (1).隐式链接

    动态链接库的隐式链接其实和静态链接库有点像

    想要生成动态链接库的隐式链接,只需要生成的.lib库文件和该动态链接库的.h头文件即可

    1.

    首先打开VS,新建Win32控制台应用程序,应用程序类型选择动态库,然后新建了动态链接库项目

    2.

    在源文件文件夹里面添加DynamicLib.cpp源文件 

    在头文件文件夹里面添加DynamicLib.h头文件

    3.
    //DynamicLib.h
     
    #pragma once
     
    extern "C" __declspec(dllexport) int Add(int x,int y);  //注意declspec前是两个下划线
    
    //DynamicLib.cpp
     
    #include "DynamicLib.h"
     
    //DLL入口函数,可写可不写
    /*
    BOOL APIENTRY DllMain(HMODULE hModule,
                          DWORD ul_reason_for_call,
                          LPVOID lpReserved)
    {
        switch(ul_reason_for_call){
            
            case DLL_PROCESS_ATTACH:
                break;
            case DLL_THREAD_ATTACH:
                break;
            case DLL_THREAD_DETACH:
                break;
            case DLL_PROCESS_DETACH:
                break;
     
        }
           return TRUE;
    }
    */
     
    int Add(int x,int y){
        return x+y;
    }
    
    4.

    生成该项目的解决方案得到.lib动态链接库

    5.

    新建另一个Win32项目或者Win32控制台来使用动态链接库的隐式链接

    6.

    使用动态链接库的隐式链接

    //Mian.cpp
     
    //使用动态链接库的头文件
    #include "DynamicLib.h"
     
    //使用静态链接库的库文件
    #pragma comment(lib,"DynamicLib.lib");
     
    int main(){
     
        int a=Add(1,2);
        ...
    }
    

    (2).显式链接

  • 相关阅读:
    关于SimpleDateFormat安全的时间格式化线程安全问题
    JAVA多线程和并发基础面试问答
    探秘Java中的String、StringBuilder以及StringBuffer
    Java开发岗位面试题归类
    Java并发编程:阻塞队列
    Shell基本概述
    Ansible--06 ansible roles
    Ansible --05 ansible jinja2
    Ansible--04 ansible 流程控制
    Ansible--03 ansible 变量
  • 原文地址:https://www.cnblogs.com/k5bg/p/11136761.html
Copyright © 2020-2023  润新知