#c #winapi #windows-7 #stl #wdk
#c #winapi #windows-7 #stl #wdk
Вопрос:
У меня есть следующий тривиальный файл с именем Temp.cpp
:
#include <string>
int main() { return 0; }
и я пытаюсь скомпилировать ее с помощью следующей командной строки в среде бесплатной сборки Windows XP, используя WDK 7.1:
cl.exe /Iincapicrtstl70 /Iinccrt C:Temp.cpp
и я получаю действительно случайные ошибки, такие как:
Microsoft (R) 32-bit C/C Optimizing Compiler Version 15.00.30729.207 for 80x86
C:WinDDK7600.16385.1incapicrtstl70iosfwd(202) :
error C2144: syntax error : 'int' should be preceded by ';'
Ошибка исчезает, если я использую stl60
вместо stl70
, но это не решает проблему.
В чем причина проблемы?
Обновление: Я попытался удалить и установить WDK снова, но ничего не изменилось. 🙁
Обновление 2: Хорошо, по-видимому, ошибка проявляется в самом файле заголовка: _SCL_INSECURE_DEPRECATE
является причиной. Кто-нибудь знает, как правильно ее отключить? (Если я просто закомментирую строки, я получу еще кучу ошибок, касающихся кучи других макросов.)
Комментарии:
1. Забавно, я попытался выполнить поиск
WDK stl70 errors
и угадайте, что появилось на первом месте в Google.. эта чертова штука становится быстрее с каждым днем. o_O2. @Xeo: Черт возьми, да, это довольно чудовищно 🙂
3. VC 7.0 — один из худших компиляторов всех времен. :-(Текущая версия 10.0 SP1.
4. не уверен, в чем собственно проблема, но разве вам не обязательно иметь
return
inmain
?5. @Andrey: вам не нужно иметь
return
inmain()
в C .
Ответ №1:
Нашел ответ сам, изменив заголовки и проверив guess’n’checking:
Мне нужно _STL70_
определить.
Ответ №2:
Что cl.exe
вы улавливаете? Если у вашего path более старый компилятор (VC6), предшествующий компилятору WDK, вы ожидаете этих ошибок. VC6 не может скомпилировать STL, поставляемый с VC7
Комментарии:
1. Нет, это правильный вариант. Я использовал пункт меню Пуск (Наборы драйверов Windows-> Среды сборки -> Windows XP-> и т.д.), И я на 100% уверен, что это правильный компилятор / компоновщик. У меня даже не установлен VC6, ха-ха.
2. Компилятор VC6 также поставляется со старыми WDK.
3. Нет; Монитор процесса сообщает мне, что я открываю правильные компиляторы, файлы и все остальное. (В моем PATH также нет никаких компиляторов.)
4. @Mehrdad: просто чтобы все точно знали, с каким компилятором имеет дело, вставьте в вопрос строку логотипа / баннера, которую компилятор выводит в качестве первой строки вывода.
Ответ №3:
по-видимому, ошибка проявляется в самом файле заголовка:
_SCL_INSECURE_DEPRECATE
является причиной. Кто-нибудь знает, как правильно ее отключить?
Если у вас возникли проблемы с _SCL_INSECURE_DEPRECATE
, попробуйте установить:
/D_SCL_SECURE_NO_DEPRECATE
Но, учитывая сообщение об ошибке, которое вы видите, это звучит так, как будто вы компилируете заголовки с помощью компилятора, который старше, чем поддержка заголовков (так что это может в любом случае не продвинуть вас далеко).
Комментарии:
1. Ага, уже пробовал это. Нет, это не помогло, хотя спасибо. : И нет, я использую полностью правильный компилятор, я даже переустановил его. Я убежден, что проблема определенно не такого рода; это просто проблема с флагами / макросами.