Люди, а у меня все работает, но читаю я эту тему и пугаюсь...
Вот что делаю я дабы не пользоваться всеми этими vcredist_x86.exe
WinXP SP2, VS2005, Qt 4.1.1, release, shared.
Думаю для начала надо разобраться как у Вас генерится манифест приложения. Т.е. embed он или внешний.
Читать про это видимо надо тут (извините url не получается, скобки похоже не нравятся):
http://msdn2.microsoft.com/en-us/library/ms235542(VS.80).aspxЕжели манифест внешний, то со своим бинарником вам надо таскать файл "my.exe.manifest". Если embed, то он уже вкомпилирован в бинарник причем как я понимаю plain текстом.
Собственно про все это уже писал
xor и писал на мой взгляд совершенно правильно, так что я всего лишь повторяюсь.
Теперь становится интересно а какие собственно сборки понадобятся вашему бинарнику на "чистом" компьютере.
В случае внешнего манифеста вы все это без труда находите в файле my.exe.manifest, а ежели он embed, то либо где нибудь файле .../Relase/my.exe.embed.manifest, либо в самом бинарнике, банальным поиском на предмет слова "manifest", благо он там живет как текст.
Что касается плюсового runtime, то ежели виндовое приложение компилировалось с ключом -MD, а нашем в случае линковки с release shared библиотеками Qt это именно так и есть, то в этом сгенеренном манифесте вы должны увидеть как минимум след.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Т.е. нашему приложению нужна сборка Microsoft.VC80.CRT, причем замечу что версии ="8.0.50608.0"
Таперича, создаем файл с именем "Microsoft.VC80.CRT.manifest"
и со след. содержимым:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
<file name="msvcr80.dll"/>
<file name="msvcp80.dll"/>
<file name="msvcm80.dll"/>
</assembly>
На "чистую" машину в один и тот же каталог копируем
- бинарник
- Qt' овые dll-ки (само собой)
- если манифест приложения внешний, то файл my.exe.manifest
- созданный нами файл Microsoft.VC80.CRT.manifest
- msvcr80.dll, msvcp80.dll, msvcm80.dll
Ну неужели не работает?
-------------------------------------------------------------------------
Кстати, я тут пробовал собирать Qt VS2005 компилятором как release static, предварительно поменяв
в ...\mkspecs\win32-msvc2005\qmake.conf
QMAKE_CFLAGS_RELEASE = -O2 -MD
на
QMAKE_CFLAGS_RELEASE = -O2 -MT
Что характерно - собралось.
Соответствено Release приложения я тоже ессно статически линковал с плюсовым runtime (-MT).
Проблем при таком подходе я пока вроде не наблюдал, ну не считая ограничений статической сборки Qt и ешё большего размера бинарника
Оно конечно страшновато, но зато runtime с собой тянуть точно не понадобится.