zoukankan      html  css  js  c++  java
  • 手动编译和链接 程序

    现在每天的开发都是使用vs 2005, 这个IDE为我们做了很多的事情,包括项目文件的管理和编译生成可执行文件等。为了对其背后的原理做一下了解,我用手动的方式来编写和生成简单的dll和exe,希望能对整个流程有个了解。

    创建一个dll文件

    先是dll文件部分,我定义了一个头文件和2个cpp文件,分别的代码如下

    //mydll.h

    #ifndef MyDllAPIHeader
    #define MyDllAPIHeader

    #ifdef MyDllAPI
    #else
    #define MyDllAPI extern "C" _declspec(dllimport)
    #endif

    MyDllAPI
    int add(int a, int b);
    MyDllAPI
    int minus(int a, int b);

    #endif
    //mydll.cpp
    #define MyDllAPI extern "C" _declspec(dllexport)
    #include
    "mydll.h"

    int add(int a, int b)
    {
    return a+b;
    }
    //mydllFuncs.cpp
    #define MyDllAPI extern "C" _declspec(dllexport)
    #include
    "mydll.h"

    int minus(int a, int b)
    {
    return a-b;
    }

    通过输入cl命令来编译一下

    cl /c mydll.cpp mydllfuncs.cp

    这时会生成这两个文件的obj文件,然后采用下面的命令链接成.dll文件

    link mydll.obj mydllfuncs.obj /dll /out:ko.dll

    其中/dll用来说明要链接一个dll文件,而/out可以用来指定生成的文件名。执行后,生成ko.dll, ko.exp, ko.lib 三个文件。

    通过dumpbin查看dll的导出信息如下:

    E:\myproj\VC\DLL>dumpbin -exports ko.dll
    Microsoft (R) COFF/PE Dumper Version
    8.00.50727.762
    Copyright (C) Microsoft Corporation. All rights reserved.


    Dump of file ko.dll

    File
    Type: DLL

    Section contains the following exports for ko.dll

    00000000 characteristics
    4E2A5131 time date stamp Sat Jul
    23 12:42:25 2011
    0.00 version
    1 ordinal base
    2 number of functions
    2 number of names

    ordinal hint RVA name

    1 0 00001000 add
    2 1 00001010 minus

    Summary

    2000 .data
    2000 .rdata
    1000 .reloc
    7000 .text

    创建调用dll的一个exe文件

    定义的可执行的程序代码如下

    #include "mydll.h"
    #include
    <stdio.h>

    int main()
    {
    printf(
    "%d\n", add(2, 3));
    printf(
    "%d\n", minus(3,2));
    }

    编译的命令如下:

    cl myexe.cpp /link ko.lib

    此时就会生成myexe.exe文件

  • 相关阅读:
    bzoj 4245: [ONTAK2015]OR-XOR【按位贪心】
    bzoj 4247: 挂饰【dp】
    bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】
    bzoj 3029: 守卫者的挑战【概率dp】
    bzoj 3732: Network【克鲁斯卡尔+树链剖分】
    bzoj 1040: [ZJOI2008]骑士【基环树+树形dp】
    bzoj 3668: [Noi2014]起床困难综合症【贪心】
    bzoj 2157: 旅游【树链剖分+线段树】
    bzoj 4521: [Cqoi2016]手机号码【数位dp】
    bzoj 3437: 小P的牧场【斜率优化】
  • 原文地址:https://www.cnblogs.com/kwliu/p/2114746.html
Copyright © 2011-2022 走看看