Почему я получаю эту ошибку, когда пытаюсь собрать Qt из исходного кода в бета-версии Visual Studio 11 Express?

Я пытаюсь собрать Qt с помощью 64-битного компилятора Microsoft. Я загрузил qt-everywhere-opensource-src-4.8.0.tar.gz с страницы загрузки Qt и распаковал его в D:\Qt. После запуска командной строки x64 Cross Tools я выполнил следующие команды:

set QTDIR=D:\Qt
set PATH=%PATH%;%QTDIR%\bin

configure.exe -debug-and-release -opensource -qt-zlib -qt-libpng -qt-libmng
 -qt-libtiff -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista
 -platform win32-msvc2010

Процесс шел достаточно гладко в течение нескольких минут, но резко остановился со следующей ошибкой:

...
qurl.cpp
qsettings_win.cpp
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 11.0\VC\BI
N\x86_amd64\cl.EXE"' : return code '0x2'
Stop.
Building qmake failed, return code 2

Я понятия не имею, что вызывает эту ошибку и что с ней делать — сообщение об ошибке далеко не полезное. Вот как выглядит моя система:

  • Потребительская предварительная версия Windows 8, 32-разрядная версия
  • Visual Studio 11.0.50.214.1 Бета Экспресс для Windows 8

Изменить: если я cd войду в каталог qmake и запущу nmake, мы обнаружим настоящую ошибку:

qfilesystemengine_win.cpp
qfsfileengine_win.cpp
D:\Qt\src\corelib\io\qfsfileengine_win.cpp(64) : fatal error C1083: Cannot open
include file: 'shlobj.h': No such file or directory
D:\Qt\src\corelib\io\qfilesystemengine_win.cpp(66) : fatal error C1083: Cannot o
pen include file: 'shlobj.h': No such file or directory
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 11.0\VC\BI
N\x86_amd64\cl.EXE"' : return code '0x2'
Stop.

Почему отсутствует shlobj.h?


person Nathan Osman    schedule 02.03.2012    source источник
comment
<shlobh.h> должен находиться в Program Files\Windows Kits\8.0\Include\um. Возможно, (а) Qt не передает этот путь к компилятору, или (б) Visual Studio 11 Beta Express для Windows 8 не включает этот заголовок. Чтобы узнать, посмотрите, существует ли файл на диске. Обратите внимание, что Express для Windows 8 поддерживает только создание приложений в стиле Metro.   -  person James McNellis    schedule 02.03.2012
comment
@JamesMcNellis: Итак... Мне нужно вернуться к VS Express 2010, чтобы собрать Qt? (Кстати, файла там нет.)   -  person Nathan Osman    schedule 02.03.2012


Ответы (4)


Visual Studio 11 Beta Express для Windows 8 поддерживает только приложения в стиле Metro. Он не включает полный SDK.

Для сборки Qt вам понадобится один из других SKU бета-версии Visual Studio 11, который вы можете загрузить с сайта веб-сайт Visual Studio. Ultimate SKU, безусловно, включает <shlobj.h> и, возможно, любые другие отсутствующие заголовки (конечно, это не обязательно означает, что Qt будет собираться; он может непреднамеренно полагаться на особенности Visual C++ 2010, или в бета-версии могут быть ошибки, которые мешают его сборке; ваш пробег может отличаться).

person James McNellis    schedule 02.03.2012
comment
Я думаю, что просто установлю VC++ 2010 Express, чтобы избежать головной боли. Спасибо, что объяснили все. - person Nathan Osman; 02.03.2012

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

Этот отсутствующий файл можно найти в Windows SDK. Если они отсутствуют, у вас должен отсутствовать SDK. Для VS 2010 установите Windows 7.1 SDK и, соответственно, для VS 2012 вам понадобится Windows 8 SDK. Расположение файлов по умолчанию после установки:

  • SDK для Windows 8:
  • C:\Program Files (x86)\Windows Kits\8.0\Include\um
  • Windows 7 SDK:
  • C:\Program Files\Microsoft SDK\Windows\v7.1\Include
  • C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\Include
person Wylie Coyote SG.    schedule 11.03.2013

Код ошибки 0x2 соответствует ERROR_FILE_NOT_FOUND. Скорее всего, один из аргументов cl.exe отсутствует. Основываясь на выводе, я бы сказал, что qsettings_win.cpp отсутствует в текущем пути или отсутствует на диске.

person JaredPar    schedule 02.03.2012

Я столкнулся с той же ошибкой при попытке собрать бета-версию Qt 5.3 для WinRT< /сильный>.

У меня была Windows 8.1 с установленной VS 2013 (Professional). Для решения проблемы мне пришлось:

  • Загрузите и установите SDK для Windows 8.1. Он будет размещен в C:\Program Files (x86)\Windows Kits\8.1;
  • Используйте Командную строку собственных инструментов VS2013 x86, доступную по адресу C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts.
person karlphillip    schedule 18.04.2014