admin管理员组

文章数量:1532440

2024年7月2日发(作者:)

用法详解

是控制MicrosoftC和C++编译器与链接器的32位工具。编译器产生通用对象

文件格式(COFF)

对象(.obj)文件。链接器产生可执行文件(.exe)或动态链接库文件(DLL)。默认情况下

编译完后自动调用进行连接.所以通常后会生成两个文件:和

;

注意,所有编译器选项都区分大小写。

注:运行可能需要在c:注册

环境变量.

vc目录下的编译程序环境变量的配置方法

在“我的电脑--属性--高级--环境变量”中,添加如下变量:

INCLUDE

C:ProgramFilesMicrosoftVisualStudioVC98Include

LIB

C:ProgramFilesMicrosoftVisualStudioVC98Lib

PATH

C:ProgramFilesMicrosoftVisualStudioCommonMSDev98Bin;C:ProgramFilesMicrosoft

VisualStudioVC98Bin

C表示安装盘符,注意这里是两个路径,因为要用到MSDev98Bin目录下的

如果已经存在这些变量,则把以上值分别加在对应的变量值的后面,注意在添加前用分号隔

开。

用法如下:

][option|file]...[][@command-file][/]

option:一个或多个CL选项。请注意,所有选项都应用于所有指定的源文件。选项是由一

正斜杠(/)或一个短划线(-)指定的。如果某个选项带有参数,则该选项的说明指

定在选项和参数之间是否允许有空格。选项名(/HELP选项除外)区分大小写。有关

更多信息,请参见CL选项的顺序。

/c:编译但不链接

/Zs:检查语法

/?:列出编译器选项

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

/arch:SSE2

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

/F:设置堆栈大小|此选项设置程序堆栈大小(以字节为单位)。

如果不使用此选项,堆栈大小默认为1MB

/F100

/Fe:重命名可执行文件

/

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

/GA:优化Windows应用程序的代码

/GL:启用全程序优化

/Gm:启用最小重新生成

/HELP:列出编译器选项

/I:在目录中搜索包含文件|指定源文件目录include

/I"e:VCinclude"

/link:将指定的选项传递给LINK

/MD:使用创建多线程DLL

/ML:使用创建单线程可执行文件

/MT:使用创建多线程可执行文件

/O1:创建小代码

/O2:创建快速代码

/Os:代码大小优先

/W:设置警告等级

/W3

------------------------------

/Ot:代码速度优先

/LD:创建动态链接库

/Ox:使用最大优化

/Zs:只检查语法

------------------------------

/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:VisualC++VC98PlatformSDKInclude"

例:cld:/EHsc

此处解释一下为什么这样调用编译命令,默认情况下,cl在编译完成之后会自动调用link,

命令行中带上/EHsc是为了打开"C++例外(Exceptions)",以免出现编译器警告;微软的编

译器从2002开始,默认设置了一个编译选项/GS,其作用是堆栈检查,以

防止堆栈或缓冲区溢出此类问题的发生,即是阻止代码溢出攻击,所以必须链接

库。其详细情况如下:

·:此函数库具体实现安全性cookie验证功能,此功能可以在用户

模式中使用,也可以在使用Win32API的应用程序中使用。大多数应用程序将链接到这个

函数库。

·:此函数库具体实现在操作系统内核模式中执行的安全性cookie

检查。在内核模式中运行的服务与子系统应该链接到这个库。

·:此函数库具体实现可以在用户模式中使用的安全性cookie验证功

能。不过它与有所不同,它可以在不使用Win32API的服务与应用程

序中使用。

---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------

LINK是将通用对象文件格式(COFF)对象文件和库链接起来以创建32位可执行(.exe)

文件或动态链接

库(DLL)的32位工具。

LINK用法如下:

/ALIGN指定每一节的对齐方式

/ALIGN选项指定程序线性地址空间中每一节的对齐方式。number参数以字节为单位,并

且必须是2的幂。默认值是4K(4096)。如果对齐方式产生

无效的图像,则链接器发出警告。除非正

在编写诸如设备驱动程序的应用程序,否则应不需要修改对齐方式。

/DLL生成DLL

/DRIVER创建WindowsNT核心模式驱动程序

/EXETYPE生成虚拟设备驱动程序

/EXETYPE:DYNAMIC创建动态加载的虚拟设备驱动程序。

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

/INCREMENTAL控制增量链接

/LARGEADDRESSAWARE通知编译器应用程序支持大于2GB的地址

/LIBPATH允许用户重写环境库路径

/LIBPATH:"e:VCLIB"/LIBPATH:"e:DXLIB"

/MACHINE指定目标平台

`/MACHINE:{AM33|ARM|EBC|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|

MIPSR41XX|SH3|SH3DSP|SH4|SH5|THUMB|X86|X64/*8.0版本*/}

/MACHINE:X86

/NOENTRY创建纯资源DLL

创建纯资源DLL时要求/NOENTRY选项。

/OPT控制LINK优化

如果生成仅运行于WindowsNT或Windows2000上的组件,则应使用/OPT:NOWIN98。

/SUBSYSTEM:指定子系统

{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|

EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|

WINDOWSCE}[,#[.##]]

/OUT指定输出文件名

/OUT:

精典用法:

link*./LIBPATH:"G:VisualC++lib"/SUBSYSTEM:WINDOWS/MACHINE:X86

rc是资源编译

/l列出资源用的区域性

0x804中国

0x409美国

用法:

rc/

中的常用参数

==============================================================

是Masm和VC/VS中通用的。

其中Masm中的版本最低,我现在用的是5.12.8078

由于其版本原因,部分参数不支持。请用Link/?对照。

==============================================================

/ALIGN(节对齐)

/ALIGN[:number]

其中:number(对齐值)。

/ALIGN选项指定程序线性地址空间中每一节的对齐方式。number参数以字节为单位,

并且必须是2的幂。默认值是4K(4096)。如果对齐方式产生无效的图像,则链接器发出

警告。

除非正在编写诸如设备驱动程序的应用程序,否则应不需要修改对齐方式。

可以用/SECTION选项的对齐参数修改特定节的对齐方式。

指定的对齐值不能小于最大的节对齐。

==============================================================

/BASE(基址)

/BASE:{address[,size]|@filename,key}

/BASE选项设置程序的基址,重写.exe文件(在0x400000处)或DLL(在

0x10000000处)的默认位置。操作系统首先尝试在程序的指定或默认基址加载程序。如果

该基址处没有足够的空间可用,则系统将重定位程序。若要防止重定位,请使用/FIXED选

项。

如果address不是64K的倍数,链接器将发出错误。您可以选择指定程序的大小,以

便链接器在程序超过您指定的大小时发出警告。

==============================================================

/DEBUG(生成调试信息)

/DEBUG选项创建.exe文件或DLL的调试信息。

链接器将调试信息放在程序数据库(PDB)中。它在后面的程序生成期间更新PDB。

为调试创建的.exe文件或DLL包含相应PDB的名称和路径。调试器在您调试程序

时读取嵌入的名称并使用PDB。链接器使用程序的基名称和扩展名.pdb命名程序数据库,

并嵌入它的创建路径。若要重写该默认值,请设置/PDB并指定不同的文件名。

编译器的仅限行号(/Zd)或C7兼容(/Z7)选项使编译器将调试信息保留在.obj文

件中。还可以使用程序数据库(/Zi)编译器选项将调试信息存储在.obj文件的PDB中。

链接器首先在写入.obj文件的绝对路径中查找对象的PDB,然后在包含.obj文件的目录

中查找。不能指定对象的PDB文件名或链接器的位置。

指定/DEBUG时暗含/INCREMENTAL。

/DEBUG将/OPT选项的默认值从REF更改为NOREF以及从ICF更改为NOICF

(因此,需要显式指定/OPT:REF或/OPT:ICF)。

==============================================================

/DEF(指定模块定义文件)

/DEF:filename(要传递到链接器的模块定义文件(.def)的名称。)

备注

/DEF选项将模块定义文件(.def)传递到链接器。只有一个.def文件可以指定给

LINK。有关.def文件的详细信息,请参见模块定义文件。

==============================================================

/DEFAULTLIB(指定默认库)

/DEFAULTLIB:library

library解析外部引用时搜索的库名。

备注

/DEFAULTLIB选项将一个library添加到LINK在解析引用时搜索的库列表。用

/DEFAULTLIB指定的库在命令行上指定的库之后和.obj文件中指定的默认库之前被搜

索。

忽略所有默认库(/NODEFAULTLIB)选项重写/DEFAULTLIB:library。如果在两者中

指定了相同的library名称,忽略库(/NODEFAULTLIB:library)选项将重写

/DEFAULTLIB:library。

==============================================================

/DLL(生成DLL)

/DLL选项生成作为主输出文件的DLL。DLL通常包含可由另一个程序使用的导出。

有三种指定导出的方法,按照建议的使用顺序依次为:

源代码中的__declspec(dllexport)(仅限C/C++语言使用)

.def文件中的EXPORTS语句

LINK命令中的/EXPORT规范

程序可使用一种以上的方法。

另一种生成DLL的方法是使用LIBRARY模块定义语句。将/BASE和/DLL选项

连用等效于LIBRARY语句。

==============================================================

/DRIVER(WindowsNT内核模式驱动程序)

/DRIVER[:UPONLY|:WDM]

使用/DRIVER链接器选项生成WindowsNT内核模式驱动程序。

/DRIVER:UPONLY使链接器将IMAGE_FILE_UP_SYSTEM_ONLY位添加到输出头

的特性中,以指定它是单处理器(UP)驱动程序。操作系统将拒绝在多处理器(MP)系统

上加载UP驱动程序。

/DRIVER:WDM使链接器设置可选头的DllCharacteristics字段中的

IMAGE_DLLCHARACTERISTICS_WDM_DRIVER位。

如果未指定/DRIVER,则链接器不会设置这些位。

如果指定了/DRIVER:

/FIXED:NO有效(/FIXED(固定基址))。

输出文件的扩展名将为.sys。使用/OUT更改默认文件名和扩展名(/OUT(输出文件

名))。

==============================================================

/ENTRY(入口点符号)

/ENTRY:function

function

一个函数,指定.exe文件或DLL的用户定义起始地址。

备注

/ENTRY选项指定一个入口点函数作为.exe文件或DLL的起始地址。

必须用__stdcall调用约定来定义函数。必须按WinMain(对于.exe文件)或

DllEntryPoint(对于DLL)的Win32API中记录的内容定义参数和返回值。建议让链接器

设置入口点,以便C运行时库正确初始化,并执行静态对象的C++构造函数。

默认情况下的入口点函数如下

使用/SUBSYSTEM:CONSOLE的应用程序;调用main(或wmain)

使用/SUBSYSTEM:WINDOWS的应用程序;调用WinMain(或wWinMain),它必

须用__stdcall来定义

DLL;调用DllMain(如果存在),DllMain必须用__stdcall来定义

==============================================================

/EXPORT(导出函数)

/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

备注

使用该选项,可以从程序导出函数,以便其他程序可以调用该函数。也可以导出数据。

通常在DLL中定义导出。

entryname是调用程序要使用的函数或数据项的名称。ordinal在导出表中指定范围在

1至65,535的索引;如果没有指定ordinal,则LINK将分配一个。NONAME关键字只

将函数导出为序号,没有entryname。

有三种导出定义的方法,按照建议的使用顺序依次为:

源代码中的__declspec(dllexport)(仅限C/C++语言)

.def文件中的EXPORTS语句

LINK命令中的/EXPORT规范

==============================================================

/FIXED(固定基址)

/FIXED[:NO]

备注

/FIXED选项通知操作系统只在其首选基址加载程序。如果首选基址不可用,则操作系

统将不加载该文件。有关更多信息,请参见/BASE(基址)。

默认情况下,/FIXED:NO是生成DLL时的默认值,/FIXED是任何其他项目类型的

默认值。

当指定/FIXED时,LINK不生成程序中的重定位节。在运行时,如果操作系统无法

在该地址加载程序,它将发出错误信息并且不加载该程序。

指定/FIXED:NO以在程序中生成重定位节。

不要在生成WindowsNT的设备驱动程序时使用/FIXED。

==============================================================

/HEAP(设置堆大小)

/HEAP:reserve[,commit]

备注

/HEAP选项设置堆的大小(以字节为单位)。此选项仅在生成.exe文件时使用。

reserve参数指定虚拟内存中总的堆分配。默认堆大小为1MB。链接器将指定值向上

舍入为最接近的4个字节。

可选commit参数取决于操作系统的解释。在WindowsNT/Windows2000中,它指定

一次分配的物理内存的数量。提交的虚拟内存导致空间被保留在页面文件中。更高的

commit值在应用程序需要更多堆空间时可节省时间,但会增加内存需求并有可能延长启动

时间。

以十进制或C语言表示法指定reserve值和commit值。

通过带HEAPSIZE的模块定义文件也可以实现该功能。

==============================================================

/INCLUDE(强制符号引用)

/INCLUDE:symbol

其中:

symbol

指定要添加到符号表的符号。

备注

/INCLUDE选项通知链接器将指定的符号添加到符号表。

若要指定多个符号,请在符号名称之间键入逗号(,)、分号(;)或空格。在命令行上,

对每个符号指定一次/INCLUDE:symbol。

链接器通过将包含符号定义的对象添加到程序来解析symbol。该功能对于添包含不会

链接到程序的库对象非常有用。

用该选项指定符号将通过/OPT:REF重写该符号的移除。

==============================================================

/LIBPATH(附加的Libpath)

/LIBPATH:dir

其中:

dir

在链接器搜索LIB环境选项中指定的路径之前,指定它将要搜索的路径。

备注

使用/LIBPATH选项重写环境库路径。链接器将首先在该选项所指定的路径中搜索,

然后在LIB环境变量中所指定的路径中搜索。对于您输入的每个/LIBPATH选项,只能指

定一个目录。如果要指定一个以上的目录,则必须指定多个/LIBPATH选项。链接器然后

将按顺序搜索指定的目录。

==============================================================

/MACHINE(指定目标平台)

/MACHINE:{ARM|EBC|IA64|MIPS|MIPS16|MIPSFPU|MIPSFPU16|

SH4|THUMB|X64|X86}

备注

/MACHINE选项指定程序的目标平台。

通常情况下,不需要指定/MACHINE选项。LINK从.obj文件中推断出计算机类型。

但在某些情况下,LINK无法确定计算机类型并发出链接器工具错误LNK1113。如果发生

了此类错误,请指定/MACHINE。

==============================================================

/MAP(生成映射文件)

/MAP[:filename]

其中:

filename

用户指定的映射文件名称。它将替换默认名称。

备注

/MAP选项通知链接器创建映射文件。

默认情况下,链接器用程序的基名称和扩展名.map命名映射文件。可选的filename使

您得以重写映射文件的默认名称。

映射文件是一个文本文件,包含有关被链接程序的下列信息:

模块名称,为文件的基名称

时间戳,来自程序文件头(不是来自文件系统)

程序中的组列表,包括每个组的起始地址(节:偏移量的形式)、长度、组名和类

公共符号的列表,包括每个地址(节:偏移量的形式)、符号名称、平直地址和包含符号

定义的.obj文件

入口点(节:偏移量的形式)

/MAPINFO选项指定要包括在映射文件中的附加信息。

==============================================================

/MAPINFO(包含映射文件中的信息)

/MAPINFO:EXPORTS

备注

/MAPINFO选项通知链接器包含映射文件中指定的信息,如果指定/MAP选项,则创

建该映射文件。EXPORTS通知链接器包含导出函数。

==============================================================

/MERGE(合并节)

/MERGE:from=to

/MERGE选项将第一个节(from)和第二个节(to)合并在一起,将结果节命名为to。

例如/merge:.rdata=.text。

如果第二个节不存在,则LINK将节from重命名为to。

/MERGE选项对于创建VxD和重写编译器生成的节名非常有用。

==============================================================

/NODEFAULTLIB(忽略库)

/NODEFAULTLIB[:library]

其中:

library

当链接器解析外部引用时使链接器忽略的库。

备注

/NODEFAULTLIB选项通知链接器将一个或多个默认库从链接器解析外部引用时所搜

索的库列表中移除。

要创建一个不包含默认库引用的.obj文件,请使用/Zl(省略默认库名)。

默认情况下,/NODEFAULTLIB从它解析外部引用时所搜索的库列表中移除所有默认

库。可选library参数使您得以将指定的库从它解析外部引用时所搜索的库列表中移除。为

每个要排除的库指定一个/NODEFAULTLIB选项。

链接器解析外部定义的引用时,首先通过在您显式指定的库中搜索,然后在用

/DEFAULTLIB选项指定的默认库中搜索,最后在.obj文件中命名的默认库中搜索。

/NODEFAULTLIB:library重写/DEFAULTLIB:library(如果在这两者中指定相同的

library名称)。

例如,如果在没有C运行时库情况下使用/NODEFAULTLIB生成程序,可能还需要

使用/ENTRY指定程序中的入口点(函数)。有关更多信息,请参见CRun-TimeLibraries。

==============================================================

/NOENTRY(无入口点)

/NOENTRY

备注

创建纯资源DLL时要求/NOENTRY选项。

==============================================================

/NOLOGO(取消显示启动版权标志)(链接器)

/NOLOGO

备注

/NOLOGO选项防止显示版权消息和版本号。

该选项还取消命令文件的回显。有关详细信息,请参见LINK命令文件。

默认情况下,该信息由链接器发送到“输出”窗口。在命令行上,它被发送到标准输出并

可以重定向到文件。

==============================================================

/OPT(优化)

控制LINK在生成期间执行的优化。

/OPT:{REF|NOREF}

/OPT:{ICF[=iterations]|NOICF}

/OPT:{WIN98|NOWIN98}

参数

REF|NOREF

/OPT:REF清除从未引用的函数和/或数据,而/OPT:NOREF保留从未引用的函数和/

或数据。

默认情况下,LINK移除未引用的封装函数。如果对象已经用/Gy选项编译过,它包

含封装函数(COMDAT)。此优化称为可传递的COMDAT消除。若要重写该默认值并在程

序中保留未引用的COMDAT,请指定/OPT:NOREF。可以使用/INCLUDE选项重写特定

符号的移除。

如果指定了/DEBUG,/OPT的默认项是NOREF(否则,为REF),而且所有函数都

保留在映像中。若要重写此默认项并优化调试生成,请指定/OPT:REF。/OPT:REF选项禁

用增量链接。

必须显式地将数据标记为COMDAT;使用__declspec(selectany)。

如果指定了/OPT:REF,默认情况下/OPT:ICF处于打开状态。如果需要/OPT:REF而

不是/OPT:ICF,则必须指定下面的内容:

link/opt:ref/opt:noicf

指定/OPT:ICF不激活/OPT:REF选项。

ICF[=iterations]|NOICF

使用/OPT:ICF[=iterations]执行相同的COMDAT折叠。可以从链接器输出中移除多

余的COMDAT。iteration指定遍历符号以查找重复项的次数。默认迭代次数是两次。附加

的迭代可以找到前一次迭代中通过折叠未发现的重复项。

请注意,默认情况下ICF有效时(显式指定/OPT:REF),与显式指定/OPT:REF,ICF

时,链接器行为是有区别的。默认的带/OPT:REF的ICF不折叠只读数据。这包括任

何.rdata、.pdata和.xdata。但是,默认的带/OPT:REF的ICF导致在为Itanium和x64生

成映像时折叠较少的函数,因为这些模块中的函数具有更多的只读数据依赖项,例如.pdata

和.xdata。若要获得完整的ICF,请显式指定/OPT:ICF。

函数通过/Gy编译器选项放在COMDAT中,常数数据放在COMDAT中。有关如何

为折叠指定数据的示例,请参见selectany。

如果REF处于打开状态并且需要在调试生成中显式打开,则默认情况下ICF处于打

开状态。如果指定了REF,则可以指定NOICF。

注意

/OPT:ICF可导致相同的地址分配到不同的函数或只读数据成员(用/Gy编译的常数变

量)。因此,/OPT:ICF可中断依赖于不同的函数或只读数据成员的地址的程序。有关更多信

息,请参见/Gy(启用函数级链接)。

WIN98|NOWIN98

WIN98和NOWIN98控制最终映像中的节对齐。对于Windows98应用程序,最好是

在4K的边界上对齐节,以改进加载时间(允许Windows98内存管理器缓存可执行图像

同时最少化浪费的空间)。默认情况下,此选项在链接器中是打开的,因此需要指定

/OPT:NOWIN98以获得精简(但在Windows98上较慢)的应用程序版本。

默认情况下,WIN98处于打开状态。WIN98在下列情况下是关闭的:

使用了/ALIGN。

/MACHINE的目标不是x86。

/SUBSYSTEM指定WINDOWS或CONSOLE以外的内容。

备注

优化通常是以增加链接时间为代价,减小图像大小并加快程序速度。

可使用/VERBOSE选项查看由/OPT:REF移除的函数和由/OPT:ICF折叠的函数。

==============================================================

/ORDER(按顺序放置函数)

/ORDER:@filename

参数

filename

指定COMDAT函数链接顺序的文本文件。

备注

/ORDER选项通知LINK按预先确定的顺序将特定的COMDAT放置到图像中以优

化程序。LINK按指定的顺序在图像的每个节中放置函数。

在filename中指定顺序。filename是按照您希望链接COMDAT的顺序列出

COMDAT的文本文件(响应文件)。filename中的每一行包含一个COMDAT的名称。如

果对象已经用/Gy选项编译过,它包含COMDAT。函数名区分大小写。

LINK使用标识符的修饰形式。编译器在创建.obj文件时修饰标识符。当需要将标识

符的修饰形式指定给链接器时,可使用DUMPBIN工具获取它。有关修饰名的更多信息,

请参见修饰名。

如果使用了多个/ORDER规范,指定的最后一个规范有效。

排序允许将一个函数与该函数调用的函数组合,通过交换优化来优化程序的分页行为。

还可将经常调用的函数分在一组。这些技术增加了调用的函数在需要它时位于内存中从而不

必从磁盘分页的可能性。

链接器在filename中的每个修饰名前放置一个下划线(_),只要名称不是以问号(?)

或at符(@)开头。例如,如果对象文件包含extern"C"intfunc(int)和intmain(void),则

DUMPBIN/SYMBOLS将列出这些修饰名:

SECT3notype()External|_func

00A00000008SECT3notype()External|_main

不过,在顺序文件中指定的名称应为func和main。

/ORDER选项禁用增量链接。

注意

LINK无法对静态函数进行排序,因为静态函数名不是公共符号名。如果指定了

/ORDER,在顺序文件中将为每个静态的或者没有找到的符号生成链接器警告LNK4037。

==============================================================

/OUT(输出文件名)

/OUT:filename

其中:

filename

用户指定的输出文件名。它将替换默认名称。

备注

/OUT选项重写链接器创建的程序的默认名称和位置。

默认情况下,链接器用指定的第一个.obj文件的基名称和适当的扩展名(.exe或.dll)

来组成文件名。

该选项设置.mapfile或导入库的默认基名称。有关详细信息,请参见生成映射文件

(/MAP)和/IMPLIB。

==============================================================

/RELEASE(设置校验和)

/RELEASE

备注

/RELEASE选项在.exe文件头中设置校验和。

操作系统要求设备驱动程序的校验和。为设备驱动程序的发布版本设置校验和,以确保

与未来的操作系统兼容。

当指定/SUBSYSTEM:NATIVE选项时,默认情况下设置/RELEASE选项。

==============================================================

/SECTION(指定节属性)

/SECTION:name,[[!]{DEKPRSW}][,ALIGN=#]

备注

/SECTION选项更改节的属性,当节的.obj文件被编译时重写属性集。

可移植可执行(PE)文件中的节大致等效于新的可执行(NE)文件中的段或资源。节包

含代码或数据。与段不同,节是连续内存的块,没有大小限制。有些节包含程序声明和直接

使用的代码或数据,而有些数据节是由链接器和库管理器()创建的,包含了对操作

系统来说至关重要的信息。有关NE文件的更多信息,请参见知识库文章“Executable-File

HeaderFormat”(Q65122)。可以在MSDNLibrary中或

/?ln=zh-cn上找到知识库文章。

指定冒号(:)和节name。name区分大小写。

不要使用以下名称,因为它们与标准名称冲突。例如,.sdata用在RISC平台上:

.arch

.bss

.data

.edata

.idata

.pdata

.rdata

.reloc

.rsrc

.sbss

.sdata

.srdata

.text

.xdata

为节指定一个或多个属性。以下列出的属性字符不区分大小写。必须指定您希望节具有

的所有属性;省略的属性字符将导致该属性位被关闭。如果不指定R、W或E,则现有的

读、写或可执行状态保持不变。

若要取反属性,请在属性字符前使用一个感叹号(!)。属性字符的含义如下所示:

字符属性含义

EExecute节是可执行的

RRead允许对数据进行读取操作

WWrite允许对数据进行写操作

SShared在所有加载图像的进程中共享节

DDiscardable将节标记为可放弃

KCacheable将节标记为不可缓存

PPageable将节标记为不可分页

K和P比较特殊,因为与其对应的节标志表示相反的含义。如果在.text节

(/SECTION:.text,K)上指定它们之中的一个,当运行带/HEADERS选项Dumpbin时在节

标志中将没有区别;它已被隐式缓存了。若要移除默认值,请指定/SECTION:.text,!K,

DUMPBIN将显示节特性,包括“未缓存。”。

没有设置E、R或W的PE文件中的节可能无效。

ALIGN=#使您得以为特定的节指定对齐值。有关更多信息,请参见/ALIGN。

==============================================================

/STACK(堆栈分配)

/STACK:reserve[,commit]

备注

/STACK选项设置堆栈的大小(以字节为单位)。此选项仅在生成.exe文件时使用。

该选项指定虚拟内存中的总的堆栈分配。默认堆栈大小为1MB。链接器将指定值向上

舍入为最接近的4个字节。

commit取决于操作系统所作的解释。在WindowsNT和Windows2000中,它指定一

次分配的物理内存量。提交的虚拟内存导致空间被保留在页面文件中。更高的commit值

在应用程序需要更多堆栈空间时可节省时间,但会增加内存需求并有可能延长启动时间。

以十进制或C语言表示法指定reserve值和commit值。

设置堆栈大小的另一种方法是使用模块定义(.def)文件中的STACKSIZE语句。如果

两者都指定,则STACKSIZE重写堆栈分配(/STACK)选项。可以使用EDITBIN工具在

生成.exe文件之后更改堆栈。

==============================================================

/STUB(MS-DOS存根(stub)文件名)

/STUB:filename

其中:

filename

MS-DOS应用程序。

备注

/STUB选项将MS-DOS存根(stub)程序附加到Win32程序。

如果在MS-DOS中执行文件,则将调用存根(stub)程序。它通常显示适当的消息;

然而,任何有效的MS-DOS应用程序都可以是存根(stub)程序。

在命令行上冒号(:)之后,为存根(stub)程序指定filename。如果文件不是可执行文

件,则链接器检查filename并发出错误信息。程序必须是.exe文件;.com文件对于存根

(stub)程序无效。

如果不使用该选项,则链接器附加发出以下消息的默认存根(stub)程序:

ThisprogramcannotberuninMS-DOSmode.

当生成虚拟设备驱动程序时,filename使用户得以指定文件名,该文件名包含要用于

VXD中而不是默认头的IMAGE_DOS_HEADER结构(在WINNT.H中定义)。

==============================================================

/SUBSYSTEM(指定子系统)

/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|

EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}

[,major[.minor]]

备注

其中:

CONSOLE

Win32字符模式应用程序。控制台应用程序是操作系统提供的控制台。如果定义main

或wmain,则CONSOLE为默认值。

可扩展固件接口

EFI_*子系统。有关更多信息,请参见EFI规范。有关示例,请参见Intel网站。最

低和默认版本为1.0。

NATIVE

WindowsNT的设备驱动程序。如果指定/DRIVER:WDM,则NATIVE为默认值。

POSIX

在WindowsNT中与POSIX子系统运行的应用程序。

WINDOWS

应用程序并不需要控制台,因为它可以创建自己的用户交互窗口。如果定义WinMain

或wWinMain,则WINDOWS为默认值。

WINDOWSCE

在WindowsCE设备上运行的应用程序。

major和minor(可选)

指定子系统的要求的最低版本。参数为0到65,535之间的十进制数。有关详细信息,

请参见“备注”。版本号没有上限。

备注

/SUBSYSTEM选项通知操作系统如何运行.exe文件。

==============================================================

/VERSION(版本信息)

/VERSION:major[.minor]

其中:

major和minor

希望.exe或.dll文件头中包含的版本号。

备注

/VERSION选项通知链接器将版本号放置在.exe或.dll文件头中。使用DUMPBIN

/HEADERS查看OPTIONALHEADERVALUES的图像版本字段,以查看/VERSION的

效果。

major和minor参数是从0到65,535的范围内的十进制数。默认值为0.0版。

用/VERSION指定的信息不影响在Windows资源管理器中查看应用程序属性时所显

示的应用程序的版本信息。该版本信息来自用于生成应用程序的资源文件。有关更多信息,

请参见版本信息编辑器。

另一种插入版本号的方法是用VERSION模块定义语句。

==============================================================

/VERBOSE(打印进度消息)

/VERBOSE[:ICF|:LIB|:REF|:SAFESEH]

备注

链接器将有关链接会话进度的信息发送到“输出”窗口。在命令行上,信息被发送到标准

输出,并可以重定向到文件。

选项说明

/VERBOSE

显示有关链接进度的详细信息。

/VERBOSE:ICF

显示关于从使用/OPT:ICF中产生的链接器活动的信息。

/VERBOSE:LIB

显示进度消息,仅指示所搜索的库。

所显示的信息包括库搜索进程,同时还列出每个库和对象名(包括完整路径),正从库

中解析的符号,以及引用该符号的对象的列表。

/VERBOSE:REF

显示关于从使用/OPT:REF中产生的链接器活动的信息。

/VERBOSE:SAFESEH

显示与在未指定/SAFESEH时哪些模块与安全异常处理不兼容的有关信息。

==============================================================

/WX(将链接器警告视为错误)

/WX[:NO]

备注

如果链接器生成警告,/WX将不会生成任何输出文件。

这与编译器的/WX类似(有关更多信息,请参见/w、/Wn、/WX、/Wall、/wln、/wdn、

/wen、/won(警告等级))。但是,为编译指定/WX并不意味着/WX在链接阶段同样有效;

必须为每种工具都显式指定/WX。

默认情况下,/WX不起作用。若要将链接器警告视为错误,请指定/WX。/WX:NO等

同于不指定/WX。

==============================================================

本文标签: 指定链接文件选项程序