“#pragma comment”是什么意思?

时间:2010-08-14 17:44:07

标签: c++ visual-c++ macros pragma

以下#pragma comment的含义是什么?

#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")

5 个答案:

答案 0 :(得分:163)

#pragma comment是一个编译器指令,它指示Visual C ++在生成的目标文件中留下注释。然后,链接器在处理目标文件时可以读取注释。

#pragma comment(lib, libname)告诉链接器将“libname”库添加到库依赖项列表中,就好像已将其添加到Linker->Input->Additional dependencies的项目属性中

请参阅MSDN上的#pragma comment

答案 1 :(得分:4)

我一直称它们为“编译器指令”。他们指导编译器在编译阶段做一些事情,分支,包括如上所示的lib,禁用特定错误等。

编译器公司通常会创建自己的扩展来促进其功能。例如,(我相信)微软开始了“#pragma once”交易,它只在MS产品中出现,现在我不太确定。

Pragma Directives它会在您将看到的表格中包含“#pragma comment”。

HTH

我怀疑GCC有自己的一组#pragma's。

答案 2 :(得分:0)

在MSVC ++中选择的库中的这些链接。

答案 3 :(得分:0)

Pragma指令指定操作系统或计算机特定的(x86或x64等)编译器选项。有几个选项。详细信息可以在https://msdn.microsoft.com/en-us/library/d9x1s805.aspx

中找到

#pragma comment( comment-type [,"commentstring"] )具有这种格式。

有关其他评论类型的详细信息,请参见https://msdn.microsoft.com/en-us/library/7f0aews7.aspx

#pragma comment(lib, "kernel32") #pragma comment(lib, "user32")

上面的代码行包含链接程序需要搜索的库名(或路径)。这些详细信息作为对象中库搜索记录的一部分包括在内 文件。

因此,在这种情况下,链接器将搜索kernel.libuser32.lib并将其包含在最终的可执行文件中。

答案 4 :(得分:0)

MSDN提供的答案和文档是最好的,但是我想补充一个典型的案例,我经常使用它,它需要使用#pragma comment在链接时向链接器发送命令,以便例子

#pragma comment(linker,"/ENTRY:Entry")

告诉链接器将入口点形式WinMain()更改为Entry(),之后CRTStartup将控制权转移到Entry()