Чего мне не хватает в переменных окружения, чтобы компоновщик не работал с LNK1181? - PullRequest
0 голосов
/ 25 марта 2009

У меня есть проект Qt, у которого во время разработки отображается консоль отладки, я собираюсь отправить продукт, чтобы удалить команду консоли qmake: CONFIG + = консоль

Однако, когда я это делаю, я получаю следующую ошибку:

link /LIBPATH:"c:\Qt\4.5.0\lib" /NOLOGO /INCREMENTAL:NO /LTCG /MANIFEST /MANIFESTFILE:"./_obj/win32\Lynx.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /VERSION:4.00 /OUT:bin\win32\Lynx.exe @C:\DOCUME~1\hannentp\LOCALS~1\Temp\nm1C9.tmp 
link_.exe /LIBPATH:c:\Qt\4.5.0\lib /NOLOGO /INCREMENTAL:NO /LTCG /MANIFEST /MANIFESTFILE:./_obj/win32\Lynx.intermediate.manifest /SUBSYSTEM:WINDOWS /MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' /VERSION:4.00 /OUT:bin\win32\Lynx.exe @C:\DOCUME~1\hannentp\LOCALS~1\Temp\nm1C9.tmp~
LINK_ : fatal error LNK1181: cannot open input file 'name='Microsoft.Windows.Common-Controls''
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\link.EXE"' : return code '0x49d'
Stop.

Я думаю, что путь к lib отсутствует, однако у меня уже есть большое количество переменных среды, которые уже настроены и работают. Кто-нибудь видел это и знает местонахождение Microsoft.Windows.Common-Controls?

Также я запускаю это из buildbot, поэтому IDE VS2008 не совсем то, где я хочу помочь.

Ответы [ 5 ]

3 голосов
/ 31 марта 2009

Кажется, что командная строка просто заключена в кавычки:

"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"

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

1 голос
/ 31 мая 2009

Не уверен, если вы добились дальнейшего прогресса в этом вопросе.

У меня была очень похожая ошибка, но с msvc2005 (не IDE). У меня нет экземпляров link_.exe, поэтому я не могу проверить ваше исправление.

Когда я включил консоль (CONFIG + = console), ему не удалось связать из-за другой проблемы - не удалось найти точку входа:

Fatal Error LNK1561: Entry Point Must Be Defined

Я случайно нашел http://support.microsoft.com/kb/140597 который говорит о конце символов обратной косой черты, думал, что заявлено, что для msvc 4 и был исправлен позже. Я проверил свой код, и у меня есть конечные косые черты, когда указано ЛИБПАТ в .pro файле. Я исправил их и получил возможность компилировать (CONFIG + = console). Теперь я убрал опцию, и у меня возникла другая, но несколько логичная проблема:

MSVCRT.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
app.exe : fatal error LNK1120: 1 unresolved externals

Глядя на ваш вывод nmake, мне интересно, смешивает ли символы прямой и обратной косой черты в

/MANIFESTFILE:"./_obj/win32\Lynx.intermediate.manifest"

вызывает эту проблему. Хотя это может быть что-то другое.

Обратите внимание, у меня также есть CONFIG -= embed_manifest_exe в моем файле .pro. Мой вывод выглядит так:

link /LIBPATH:"c:\Apps\boost\boost_1_38\lib" /NOLOGO /INCREMENTAL:NO /LTCG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:valueForSba.exe @C:\DOCUME~1\LOCALS~1\Temp\nm398.tmp
Creating library app.lib and object app.exp
MSVCRT.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
app.exe : fatal error LNK1120: 1 unresolved externals

Я также не использую классы qt в этом проекте, а использую только qmake для получения Makefile. (qmake из 4.5.1, коммерческое издание)

0 голосов
/ 18 июня 2009

Я страдал от той же проблемы. Оказалось, что этот компьютер имеет две разные версии MSVC (7.1 и 8.0). Хотя SDK построен для 8.0, он был выбран для 7.1 в QtCreator Tools-> Options-> Qt4-> Qt4 Versions. Поэтому я переключился на версию 8.0, и теперь она работает нормально.

0 голосов
/ 25 марта 2009

Из того, что я нашел на сайте Microsoft, Comctl32.dll - это библиотека, которую вам нужно найти и добавить ее путь в вашу среду сборки. Посмотрите, работает ли это.

0 голосов
/ 25 марта 2009

У меня сложилось впечатление, что бесплатная версия Qt собирается только с Mingw, а не с Visual Studio. Если вы используете бесплатную версию Qt, это может быть проблемой. Если вы не знакомы с Mingw, то его набор инструментов компилятора GCC настроен для использования под windows с их файлами .lib для различных библиотек Windows.

...