`

pragma comment的使用

    博客分类:
  • C++
 
阅读更多
#pragma comment( comment-type [,"commentstring"] )

comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。
commentstring是一个提供为comment-type提供附加信息的字符串,
Remarks:
1、compiler:放置编译器的版本或者名字到一个对象文件,该选项是被linker忽略的。
2、exestr:在以后的版本将被取消。
3、lib:放置一个库搜索记录到对象文件中,这个类型应该是和commentstring(指定你要Liner搜索的lib的名称和路径)
这个库的名字放在Object文件的默认库搜索记录的后面,linker搜索这个这个库就像你在命令行输入这个命令一样。你可以
在一个源文件中设置多个库记录,它们在object文件中的顺序和在源文件中的顺序一样。如果默认库和附加库的次序是需要
区别的,使用Z编译开关是防止默认库放到object模块。
4、linker:指定一个连接选项,这样就不用在命令行输入或者在开发环境中设置了。
只有下面的linker选项能被传给Linker.
/DEFAULTLIB

/EXPORT

/INCLUDE

/MANIFESTDEPENDENCY

/MERGE

/SECTION

(1)/DEFAULTLIB:library

/DEFAULTLIB 选项将一个 library 添加到 LINK 在解析引用时搜索的库列表。用 /DEFAULTLIB
指定的库在命令行上指定的库之后和 .obj 文件中指定的默认库之前被搜索。
忽略所有默认库 (/NODEFAULTLIB) 选项重写 /DEFAULTLIB:library。如果在两者中指定了相同的 library 名称,忽略库 (/NODEFAULTLIB:library) 选项将重写 /DEFAULTLIB:library。

(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

使用该选项,可以从程序导出函数,以便其他程序可以调用该函数。也可以导出数据。通常在 DLL 中定义导出。entryname 是调用程序要使用的函数或数据项的名称。ordinal 在导出表中指定范围在 1 至 65,535 的索引;如果没有指定 ordinal,则 LINK 将分配一个。NONAME 关键字只将函数导出为序号,没有 entryname。

DATA 关键字指定导出项为数据项。客户程序中的数据项必须用 extern __declspec(dllimport) 来声明。
有三种导出定义的方法,按照建议的使用顺序依次为:

源代码中的 __declspec(dllexport)

.def 文件中的 EXPORTS 语句

LINK 命令中的 /EXPORT 规范

所有这三种方法可以用在同一个程序中。LINK 在生成包含导出的程序时还创建导入库,除非生成中使用了 .exp 文件。
LINK 使用标识符的修饰形式。编译器在创建 .obj 文件时修饰标识符。如果 entryname 以其未修饰的形式指定给链接器(与其在源代码中一样),则 LINK 将试图匹配该名称。如果无法找到唯一的匹配名称,则 LINK 发出错误信息。当需要将标识符指定给链接器时,请使用 Dumpbin 工具获取该标识符的修饰名形式。

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

若要指定多个符号,请在符号名称之间键入逗号 (,)、分号 (;) 或空格。在命令行上,对每个符号指定一次 /INCLUDE:symbol。
链接器通过将包含符号定义的对象添加到程序来解析 symbol。该功能对于添包含不会链接到程序的库对象非常有用。用该选项指定符号将通过 /OPT:REF 重写该符号的移除。

我们经常用到的是#pragma   comment(lib,"*.lib")这类的。
#pragma   comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。  
和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的  
程序别人在使用你的代码的时候就不用再设置工程settings了

出处:http://www.cppblog.com/xczhang/archive/2008/01/10/40866.html
分享到:
评论

相关推荐

    #pragma comment()的使用

    #pragma comment()的使用

    pragma_comment用法

    pragma_comment用法,jian dan de jie shao.pragma_comment用法

    #pragma用法大全.doc

    #pragma用法大全.doc#pragma用法大全.doc

    #pragma预编译指令详解

    二、 另一个使用得比较多的#pragma参数是code_seg。格式如: 2 三、 #pragma once (比较常用) 3 四、 #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。 3 五、 #pragma warning指令 3 六、 ...

    VC 对话框 CStatic 使用opengl绘图

    VC 对话框 CStatic 使用opengl绘图 有完整的自定义的类 完整的代码 VC2010编译通过 不过要自己配置好OPNGL库路径 默认(OpenGLView.h)在 #include <gl.h> #include <glu.h> ...#pragma comment(lib,"opengl.lib")

    已编译的CxImage库文件

    #pragma comment(lib,"./imp_File/cximage.lib") #pragma comment(lib,"./imp_File/Jpeg.lib") #pragma comment(lib,"./imp_File/png.lib ") #pragma comment(lib,"./imp_File/zlib.lib ") #pragma comment(lib,...

    opencv 最新静态库(vs2010下Debug版本)

    #pragma comment(lib, "libjasperd.lib") #pragma comment(lib, "libjpegd.lib") #pragma comment(lib, "libpngd.lib") #pragma comment(lib, "libtiffd.lib") #pragma comment(lib, "zlibd.lib") #pragma ...

    opencv 最新静态库(vs2010下Release版本)

    #pragma comment(lib, "libjasper.lib") #pragma comment(lib, "libjpeg.lib") #pragma comment(lib, "libpng.lib") #pragma comment(lib, "libtiff.lib") #pragma comment(lib, "zlib.lib") #pragma comment...

    C++中#include、#pragma的含义

    C++中#include、#pragma的含义

    tesseract4.0编译后链接库

    #pragma comment(lib,"tesseract40.lib") #pragma comment(lib,"pvt.cppan.demo.danbloomberg.leptonica-1.76.0.lib") #pragma comment(lib,"pvt.cppan.demo.jpeg-9.2.0.lib") #pragma comment(lib,"pvt.cppan.demo....

    Libcurl---编译好的lib文件,含release,debug版本;

    #pragma comment(lib,"libcurld.lib") #else #pragma comment(lib,"libcurl.lib") #endif #pragma comment ( lib, "ws2_32.lib" ) #pragma comment ( lib, "winmm.lib" ) #pragma comment ( lib, "wldap32.lib" ) #...

    curl vs2013编译的DEBUG版static lib

    curl vs2013编译的DEBUG版static lib,可以在vs2013里面直接#pragma comment(lib, "libcurld")引用,集成zlib

    EasyHook-2.7.6270.0-StaticLib

    #pragma comment( lib, "Aux_ulib.lib") #pragma comment( lib, "psapi.lib") #pragma comment( lib, "EasyHook64.lib") #else #pragma comment( lib, "Aux_ulib.lib") #pragma comment( lib, "psapi.lib") #pragma ...

    OpenSSL 1.0的64位lib静态库 libeay64.lib ssleay64.lib

    OpenSSL 1.0的64位lib静态库 libeay64.lib...#pragma comment (lib,"libeay64.lib") #pragma comment (lib,"ssleay64.lib") #else #pragma comment (lib,"libeay32.lib") #pragma comment (lib,"ssleay32.lib") #endif

    Libqrencode 4.0.2.rar

    #pragma comment(lib,"../Libqrencode 4.0.2/debug/lib.X86/LibQRd.lib") #pragma comment(lib,"../Libqrencode 4.0.2/debug/lib.X64/LibQRd.lib") #else #pragma comment(lib,"../Libqrencode 4.0.2/release/lib....

    Flex实例 自绘图形按钮

    NULL 博文链接:https://guangqiang.iteye.com/blog/802589

    winzlog用VS2010重新编译的

    #pragma comment(lib, "zlog_vc100x86.debug.lib") #else #pragma comment(lib, "zlog_vc100x64.debug.lib") #endif #else #ifndef _WIN64 #pragma comment(lib, "zlog_vc100x86.release.lib") #else #pragma ...

    NeHe的opengl源码

    NeHe教程上的源码连接无法打开,在网上找的的,给大家学习用。 使用方法:visual c++6.0. 1.file-new-project-win32 名字任意,如:opengl1. 2.an empty object....#pragma comment( lib, "Glaux.lib" )

    UseLib.zip

    使用这个小工具,可将指定目录及其子目录下的全部LIB文件自动生成为含完整路径的“#pragma comment(lib,”语句,不需要在VS环境设置LIB目录。 示例: #ifndef D__VTK820_Debug_lib #define D__VTK820_Debug_lib ...

    redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库

    这个压缩包里包含VS2022编译好的库... #pragma comment(lib, "./lib/hiredisd.lib") #else #pragma comment(lib, "./lib/hiredis.lib") #endif #pragma warning(pop) // 恢复4200警告 更多问题可以到我的blog上留言

Global site tag (gtag.js) - Google Analytics