180

以下是什么#pragma comment意思?

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

5 回答 5

203

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

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

请参阅MSDN 上的#pragma 评论

于 2010-08-14T18:14:23.927 回答
5

我一直称它们为“编译器指令”。它们指示编译器在编译阶段执行操作、分支,包括如上所示的库、禁用特定错误等。

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

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

高温高压

例如,我怀疑 GCC 有自己的一套#pragma。

于 2010-08-14T18:00:01.503 回答
3

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

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

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

于 2019-09-03T17:11:51.653 回答
1

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

于 2010-08-14T17:46:03.670 回答
1

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链接器会搜索并包含在最终的可执行文件中。

于 2018-07-17T07:48:17.997 回答