zoukankan      html  css  js  c++  java
  • 静态库lib、动态库dll基础

    首先从hello world!开始

    //main.cpp文件
    
    void cpu();
    int main()
    {
        put();
        return 0;
    }

    在main.cpp中定义了一个cpu();函数,但没有实现其功能,现在将其功能在自己写的库中实现输出hello world!

    //cputdll.cpp
    #include <iostream> using namespace std; __declspec(dllexport) void put() { cout << "hello my first dll" << endl; }

    功能实现函数;(静态链接库方式实现

    在vs命令行中编译main.cpp到目标文件main.obj

    cl -c main.cpp

    编译cputdll.cpp到目标文件cputdll.obj目标文件并且连接生成静态库.lib

    cl -c cputdll.cpp
    lib cputdll.obj cputdll.lib

    将主文件与静态库连接生成可执行.exe文件

    link main.obj cputdll.lib

    运行main.exe 输出 hello world!(静态库输出hello world!)

    动态链接方式:

    cl -c main.cpp     //生成main.obj
    cl -c cputdll.cpp //生成cputdll.obj
    cl /LD cputdll.obj //生成cputdll.lib(此时的lib只记录接口信息)与cputdll.dll
    link main.obj cputdll.lib //连接生成可执行main.exe

    运行main.exe 输出 hello world!(动态库输出hello world!)

    为什么要用库呢?

    一、概念

    DLL:Dynamic Link Library,即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。

    优点

    (1)节省内存和代码重用:当多个程序使用同一个函数库时,DLL可以减少在磁盘和物理内存中加载代码的重复量,且有助于代码的重用。

    (2)模块化:DLL有助于促进模块式程序开发。模块化允许仅仅更改几个应用程序共享使用的一个DLL中的代码和数据而不需要更改应用程序自身。这种模块话的基本形式允许如Microsoft Office、Microsoft Visual Studio、甚至windows自身这样大的应用程序 使用较为紧凑的补丁和服务包。

    二、编写

    __declspec(dllexport)放在函数头,标示该函数是外部引用函数所以库能被其它程序调用的先决条件;但往往一个库中有多个函数;所以会把函数定义在一个头文件中;如上程序可以这样改写
    ///////////main.cpp文件
    #include "cputdll.h"int main()
    {
        put();
        return 0;
    }
    ///////////cputdll.h
    __declspec(dllexport) void cpu();

    ..
    ///////////cputdll.cpp
    #include <iostream> using namespace std; void put() { cout << "hello my first dll" << endl; }
    ....

  • 相关阅读:
    关于脚本编写的注意点
    关于情报收集以及应用
    关于情报收集以及应用
    关于linux服务器的批量维护、批量升级、
    关于文档
    cf卡中,wtmp文件较大,导致磁盘空间满了
    node.js 对接公众平台
    highcharts的.net本地导出环境安装记录
    兼容 IE,firfox 的时间日期出现 NaN
    IE11无法 登陆银行网站
  • 原文地址:https://www.cnblogs.com/flowingwind/p/8306844.html
Copyright © 2011-2022 走看看