编译Microsoft CRT 11 (msvcrt110.dll) - 包含文件的正确顺序是什么?

5

我正在尝试自己编译Microsoft CRT 11(与VS2012一起提供的版本)。

我知道在VS2008之前,这个操作完全由Microsoft支持:

http://msdn.microsoft.com/en-us/library/k9a8ehy3(v=vs.90).aspx

但自从VS2010以后,你不应该再这样做了,并且我意识到风险(主要是编译错误,以及遇到无法解决的问题)

我正在使用VS提供的以下目录作为输入代码和头文件:

 Code:
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src
 Headers:
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include
 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
 C:\Program Files (x86)\Windows Kits\8.0\Include\shared
 C:\Program Files (x86)\Windows Kits\8.0\Include\um
 C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT

(到目前为止,我所做的唯一更改是从项目中删除了一些MSIL源代码)

大部分代码已经编译完成。但是我无法编译该文件。

 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\assert.c

由于错误:

 error C3861: '_ReturnAddress': identifier not found

如果我添加

 #include <intrin.h>

问题已经解决。但我认为应该能够在不直接修改代码的情况下解决。

当然,我一直面临新的挑战。但我认为解决当前问题的方法是修复头文件目录的包含顺序。头文件目录应该按照什么顺序使用?


很难说。他们使用的SDK版本是个猜测。我怀疑Windows头文件会引入一些东西,比如内部函数。 - Hans Passant
1个回答

2

您可以在Visual Studio项目中强制包含(而无需更改源代码)(尽管我不确定这是否是更好的解决方案)。

要这样做,请右键单击解决方案资源管理器中的.c文件,然后转到C / C ++ ->高级->强制包含文件,并添加intrin.h(或在命令行中添加/FI“intrin.h”)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接