当前位置:天才代写 > tutorial > C语言/C++ 教程 > 抽取VS文件构成类GCC的编译器并编译C措施为dll动态链接库

抽取VS文件构成类GCC的编译器并编译C措施为dll动态链接库

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:1012

副标题#e#

用惯了linux下的GCC编译东西,倒喜欢起呼吁行的方法编译链接C措施,居然还发明我装的VS东西没看到直接编译C措施的东西(我不太熟悉这个)。VS的编译文件呼吁是cl,链接呼吁是link。参考了网上资料,回收提取VS的编译器文件构成一个可以呼吁行方法编译措施的东西。以下为步调:

1,在本身目次建设文件夹,如:D:/vctool;

2,将VS安装目次下的VC目次下的bin、lib、include目次考到vctool目次下;

3,将c:/Program Files/Microsoft SDKs/Windows/V6.0A(或雷同目次,亦是VS的安装文件)下的Lib目次拷到vctool目次下,并记得不要包围而是重定名为sdklib;

4,此刻所需的呼吁文件和类库、include文件都拷过来了,将bin目次加到情况变量path中;

5,接下来可以编写c语言文件 Test.c:

#include "stdio.h"        
__declspec(dllexport) int sum(int a, int b)    
{    
        return a + b;    
}

5,编写编译文件:build.bat:

set PATH=./;D:/vctool/bin;%path%
set INCLUDE=D:/vctool/include
set LIB=D:/vctool/lib;D:/vctool/sdklib
    
cl /c Test.c
link /dll Test.obj
pause

6,双击运行build.bat,发明编译错误,找不到mspdb80.dll文件:

抽取VS文件组成类GCC的编译器并编译C法子为dll动态链接库

于是在VS安装目次下搜索,将该文件拷贝到vstool/bin目次下;再双击build.bat编译,编译乐成,目次下已生成:

Test.dll Test.lib Test.obj

若链接的时候呈现 LINK: fatal error LNK1104:无法打开文件“kernel32.lib” 错误,则是因为sdklib没拷对可能没设到情况变量LIB(build.bat)

以下为网上找到的相关资料:

2.下面具体先容下cl呼吁:

cl.exe 是节制 Microsoft C 和 C++ 编译器与链接器的 32 位东西。编译器发生通用工具文件名目 (COFF)

工具 (.obj) 文件。链接器发生可执行文件 (.exe) 或动态链接库文件 (DLL)。

留意,所有编译器选项都区分巨细写。


#p#副标题#e#

用法如下:

CL [option…] file… [option | file]… [lib…] [@command-file] [/link link-opt…]

option : 一个或多个 CL 选项。请留意,所有选项都应用于所有指定的源文件。选项是由一个正斜杠 (/) 或一个短划线 (-) 指定的。假如某个选项带有参数,则该选项的说明指定在选项和参数之间是否答允有空格。选项名(/HELP 选项除外)区分巨细写。 CL:

/c : 编译但不链接

/Zs : 查抄语法

/? : 列出编译器选项

/arch : 利用 SSE 或 SSE2 指令生成代码

/arch:SSE2

/clr : 启用 C++ 的托管扩展并发生在民众语言运行库上运行的输出文件

/F : 配置仓库巨细 | 此选项配置措施仓库巨细(以字节为单元)。假如不利用此选项,仓库巨细默认为 1 MB,好比:/F 100

/Fe : 重定名可执行文件

/Feexe.exe

/G7 :针对 Pentium 4 或 Athlon 优化代码。

/GA :优化 Windows 应用措施的代码

/GL :启用全措施优化

/Gm :启用最小从头生成

/HELP :列出编译器选项

/I :在目次中搜索包括文件 | 指定源文件目次 include,譬喻:/I "e:\VC\include"

/link : 将指定的选项通报给 LINK

/MD : 利用 MSVCRT.lib 建设多线程 DLL

/ML : 利用 LIBC.lib 建设单线程可执行文件

/MT : 利用 LIBCMT.lib 建设多线程可执行文件

/O1 : 建设小代码

/O2 : 建设快速代码

/Os : 代码巨细优先

/W : 配置告诫品级

/W3

/Ot : 代码速度优先

/LD : 建设动态链接库

/Ox : 利用最大优化

/TC : 指定 C 源文件

/TP : 指定 C++ 源文件

—————————————————————————————–

file : 一个或多个源文件、.obj 文件或库的名称。CL 编译源文件并将 .obj 文件和库的名称通报给链接器。有关更多信息,请拜见 CL 文件名语法。

lib : 一个或多个库名。CL 将这些名称通报给链接器。

command-file: 包括多个选项和文件名的文件。有关更多信息,请拜见 CL 呼吁文件。

link-opt : 一个或多个链接器选项。CL 将这些选项通报给链接器

———————————————————————————————

精典用法:

cl *.cpp /G7 /MD /Ox /Ot /W3 /c /EHsc /I"G:\Visual C++\VC98\PlatformSDK\Include"

3.说道cl,不得不说一下另一个东西link

link是将通用工具文件名目 (COFF) 工具文件和库链接起来以建设 32 位可执行 (.exe) 文件或动态链接库 (DLL) 的 32 位东西。

link用法如下:

/ALIGN : 指定每一节的对齐方法

/ALIGN : 选项指定措施线性地点空间中每一节的对齐方法。number 参数以字节为单元,而且必需是2 的幂。默认值是 4K (4096)。假如对齐方法发生无效的图像,则链接器发出告诫。除非正在编写诸如设备驱动措施的应用措施,不然应不需要修改对齐方法。

#p#副标题#e#

/DLL : 生成 DLL

/DRIVER : 建设 Windows NT 焦点模式驱动措施

/EXETYPE : 生成虚拟设备驱动措施

/EXETYPE:DYNAMIC 建设动态加载的虚拟设备驱动措施。

/EXETYPE:DEV386 建设静态加载的虚拟设备驱动措施。这是 /EXETYPE 的默认值

/INCREMENTAL : 节制增量链接

/LARGEADDRESSAWARE : 通知编译器应用措施支持大于 2 GB 的地点

/LIBPATH : 答允用户重写情况库路径

/LIBPATH:"e:\VC\LIB" /LIBPATH:"e:\DX\LIB"

/MACHINE : 指定方针平台

/MACHINE:{AM33|ARM|EBC|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|SH3|SH3DSP|SH4|SH5|THUMB|X86| X64/*8.0版本*

 

    关键字:

天才代写-代写联系方式