Компиляция Microsoft CRT 11 (msvcrt110.dll) — каков правильный порядок включения?

Я пытаюсь самостоятельно скомпилировать 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>

это решено. Но я думаю, что это должно быть решаемо без прямых изменений в коде.

Конечно, я постоянно сталкиваюсь с новыми проблемами. Но я думаю, что решение текущей проблемы состоит в том, чтобы исправить порядок включения каталогов заголовков. В каком порядке следует использовать каталоги заголовков?


person user972014    schedule 22.11.2014    source источник
comment
Жесткие печенья. Можно только догадываться, какую версию SDK они использовали. Я подозреваю, что заголовки окон втягивают такие вещи, как встроенные функции.   -  person Hans Passant    schedule 23.11.2014


Ответы (1)


Вы можете принудительно включить (без изменения исходного кода) в проект визуальной студии (хотя я не уверен, что это лучшее решение).

Для этого щелкните правой кнопкой мыши .c в обозревателе решений, затем перейдите в C/C++ -> Дополнительно -> Принудительно включить файл и добавьте intrin.h (или добавьте /FI"intrin.h" в командной строке).

person Jerem    schedule 29.12.2014