LINUX.ORG.RU

Deploying the MSVC++2005 Express compiled Qt Software


0

0

До недавнего времени я собирал свои Qt-программы под винду при помощи MinGW. Недавно решил попробовать использовать компилер из MSVC++ 2005 Express (который бесплатный). Взял обычный qt-opensource, пропатчил и собрал с MSVC++. Потом принялся за свои проги. Было много мата, но сегодня самая большая прога успешно собралась и заработала. Результат на 30% меньше в размере, ест в 1,5 раза еньше памяти, скорость возросла в 1,5..2 раза (это не голословно, я замерял).

Решил я запустить на другом компе, где такая же WinXPSP2. Полностью скопировал каталог c:\Qt\4.2.1-msvc, настроил переменные... И тут произошёл грандиозный упс. Мой exe-шник не хочет запускаться. При этом он не говорит прямо, чё ему надо (dll какую или ещё что), а просто выдаёт загадочную фразу "Приложение не может быть запущено, потому что его конфигурация неправильная. Переустановите". Такой херни я раньше не видывал. Проги, собранные MinGW, всегда работали великолепно на любом компе с виндой 2000 и выше - главное либы им дать Qt-шные и маленький огрызок от mingw.

Далее, простейшая прога без Qt (только stdio.h), собранная этим MSVC++2005 Express, пашет нормально на всех компах. Значит, дело в Qt?

Что делать? ЧТо именно оно хочет? В каком месте ударить в бубен?

anonymous


может, не все зависимости разрешаются? сам не пробовал, но не исключено, что express то-же что-то добавляет. попробуйте посмотреть зависимости через depends.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

В зависимостях я откопал две dll, которых у меня на этой машине действительно нет: msvcp80.dll размером 548.864 и msvcr80.dll размером 626.688. Кхм... Mingw-сборки требуют одну крошечную dll размером менее 20kb. Ну и аппетиты у MS. Но это всё равно не помогло. То же самое сообщение, та же самая загадка. Самое главное - почему оно не сообщает, что именно ему надо? Почему я должен сам гадать на кофейной гуще???

anonymous
()
Ответ на: комментарий от anonymous

> В зависимостях я откопал две dll, которых у меня на этой машине действительно нет: msvcp80.dll размером 548.864 и msvcr80.dll размером 626.688.

File description: Microsoft® C Runtime Library, v. 8.0.50215.44
File description: Microsoft® C++ Runtime Library, v. 8.0.50215.44

рантайм короче C/C++. обычное дело.

> Кхм... Mingw-сборки требуют одну крошечную dll размером менее 20kb.

просто в mingw родная версия линкуется статиком.. ;)

> Ну и аппетиты у MS.

ну а это уже как слинковать ;)

> Но это всё равно не помогло. То же самое сообщение, та же самая загадка. Самое главное - почему оно не сообщает, что именно ему надо? Почему я должен сам гадать на кофейной гуще???

ну тут я к сожалению пас, никогда не общался с 2005 тем более Express, последний в моем списке MSVC .Net 2003 :-/

// wbr

klalafuda ★☆☆
()


ps: может, по случаю под рукой есть честный .Net 2003 на попробовать? потому что с ним у меня вроде таких проблем не наблюдалось на Qt 4.2.1

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

Нет, тут явно какая-то херня, не связанная с зависимостями. depends.exe из Platform SDK на первой машине (где это всё и собиралось) открывает мой exe-шник без вопросов (только на msjava.dll ругается, но с этим всё ясно - SP2, пилять), а на другой его начинает тошнить теми же сообщениями про неправильность конфигурации и переустановку приложения. Что-то MS опять намудрила, похоже.

anonymous
()
Ответ на: комментарий от klalafuda

> ps: может, по случаю под рукой есть честный .Net 2003 на попробовать? потому что с ним у меня вроде таких проблем не наблюдалось на Qt 4.2.1

К сожалению, пока нет. Потом, может, появится. Но я принципиально не хочу собирать платным компайлером.

anonymous
()
Ответ на: комментарий от klalafuda

Кстати, тебе ничего не говорит загадочная фраза

Error: The Side-by-Side configuration information in HELLO.EXE contains errors. (14001)

, которую выплёвывает depends?

anonymous
()
Ответ на: комментарий от anonymous

> To summarize, if you want to redistribute an app with a dependency on the C-runtime, ATL, or MFC without getting into more advanced installers, you can either run the program vcredist_x86.exe, which installs all VC++ 8 redistributable DLLs in the machine's system directory, or you can copy individual directories from "Microsoft Visual Studio 8\VC\redist\x86" (e.g. Microsoft.VC80.CRT) and place these directories beside your application.

> In the old world you could just dropped individual DLLs beside the application. Now you need the entire "assembly" including its manifest.

Всё, что я могу сказать на это - ВАШУ МАТЬ! Идите вы нах с вашими заморочками, я просто буду юзать mingw. Оно хоть работает, а не тошнится всяким бредом.

anonymous
()
Ответ на: комментарий от anonymous

Цирк ещё не уехал.

В pro-файл можно вставить

CONFIG -= embed_manifest_exe

Угадайте, что в этом случае происходит. Qt, судя по размеру exe, честно не встраивает манифест. Результат: exe по-прежнему не запускается, но сообщение об ошибке теперь другое, более длинное: не могу правильно инициализировать приложение (=xc0150002).

Пилять.

anonymous
()
Ответ на: комментарий от anonymous

Может проще все статически собрать и не связываться с этим "side-by-side DLL"? Ведь насколько я понимаю, их придумали только для того, чтобы решить проблему с DLL hell.

bigbit ★★★★★
()
Ответ на: комментарий от anonymous

Понятно, что ручное копирование каталогов

c:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de0 6acd\

c:\WINDOWS\WinSxS\Policies\x86_policy.8.0.Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_x- ww_77c24773\

и файлов

c:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42 _x-ww_0de06acd.cat

c:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42 _x-ww_0de06acd.manifest

проблему решает, но... в какую ещё ракообразную позу поставит MS свою паству в следующий раз???

anonymous
()

> скорость возросла в 1,5..2 раза (это не голословно, я замерял).

Пооптимизировать в mingw пробовал? В том числе с

-fprofile-arcs -fprofile-values -ftest-coverage

тестовым прогоном и новым сбором с -fprofile-use

Я так программу dcraw (для работы с RAW фотографиями) процентов на 15 ускорил.

anonymous_incognito ★★★★★
()

Студия умеет создавать installer'ы. Так вот создаешь installer - добавляешь в него свое приложенние и собираешь. На выходе два файла .msi и setup.exe запускаешь на таргет машине setup.exe - оно ставит пререквизиты и зависимости для твоего проекта. Потом тем же setup.exe свежепоставленное сносишь. Удаляется твой бинарь, а зависимости и пререквизиты остаются.

Так сказать welcome to microsoft world.

eXOR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.