Russian Qt Forum
Ноябрь 24, 2024, 22:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
>
VC90.CRT зависимость
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: VC90.CRT зависимость (Прочитано 41521 раз)
Flakes
Гость
VC90.CRT зависимость
«
:
Май 21, 2008, 06:08 »
При переносе программки на "чистую" машину, ругается на отсутствие msvcr90.dll. Пытался слинковать с msvcrt.lib, безрезультатно. Пришлось эти куски выдрать из ..\Windows\WinSxS на новую машину.
Как все таки вогнать все это в ехе-шник?
Записан
Sergey B.
Программист
Offline
Сообщений: 544
Re: VC90.CRT зависимость
«
Ответ #1 :
Май 21, 2008, 13:29 »
С программой ставить это.
Записан
IMPOMEZIA
Гость
Re: VC90.CRT зависимость
«
Ответ #2 :
Май 21, 2008, 13:37 »
Либо таскать с собой папочку
Microsoft.VC90.CRT
из
Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\
как и
Microsoft Visual C++ 2008 Redistributable Package
это не вгонит всё это в exe-шник, но удовлетворит зависимости.
Записан
Flakes
Гость
Re: VC90.CRT зависимость
«
Ответ #3 :
Май 21, 2008, 15:30 »
Спасибо!
Все слишком весомое, я лучше буду таскать пару файликов из ..\Windows\WinSxS\
Записан
Flakes
Гость
Re: VC90.CRT зависимость
«
Ответ #4 :
Май 23, 2008, 01:29 »
если я просто перенес проект в VS2008 из VS2005, это уже и объясняет эту зависимость или я может галочку где забыл снять?
Записан
Godfather
Гость
Re: VC90.CRT зависимость
«
Ответ #5 :
Июнь 03, 2008, 12:43 »
компиляция с Multi-threaded DLL (/MD) под 2005 создает зависимость от MSVCRT80.dll (т.е. Microsoft Visual C++ Runtime 8.0)
под 2008 - с MSVCRT90.dll
компиляция с Multi-threaded (/MT) такой зависимости не создает
но она присутствует от самой Qt (как скомпилировать без зависимости - большой для меня вопрос)
Записан
Godfather
Гость
Re: VC90.CRT зависимость
«
Ответ #6 :
Июнь 04, 2008, 14:41 »
итак
Qt 4.4 легко и непренужденно компилируется с 9.0 (qmakespec win32-msvc2008)
configure.exe из Qt 4.3.x не понимает такого спека, даже если скопировать %QTDIR%\mkspecs\win32-msvc2008
но самая полная перекомпиляция (типа delete bin\*.* && make clean && make) избавляет от следов 8.0
ура!
Записан
crossly
Гость
Re: VC90.CRT зависимость
«
Ответ #7 :
Июнь 17, 2008, 11:59 »
Цитировать
но она присутствует от самой Qt (как скомпилировать без зависимости - большой для меня вопрос)
а что если подправить в qmake.conf....
Код:
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd
Записан
Flakes
Гость
Re: VC90.CRT зависимость
«
Ответ #8 :
Сентябрь 22, 2008, 15:36 »
С этим .manifest файлом (как пример) и dll-ками которые в нем указаны - проекты, собранные в VS2008 работают на абсолютно голой системе, никаких Microsoft Visual C++ 2008 Redistributable Package. Я уверен об этом знали многие гуру, но никто не упомянул
Записан
IMPOMEZIA
Гость
Re: VC90.CRT зависимость
«
Ответ #9 :
Сентябрь 22, 2008, 17:09 »
Flakes
А сам манифест вы взяли из:
<Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT
как было сказано мною в третьем посте.
Об этом также сказано в ассистенте.
+ msvcm90.dll не нужен.
+ msvcp90.dll не нужен при
-no-stl
+ в Qt 4.4.2 с опциями по умолчанию вас ждёт облом с плагинами.
Записан
Flakes
Гость
Re: VC90.CRT зависимость
«
Ответ #10 :
Сентябрь 22, 2008, 17:52 »
Не, я выдрал его из другого места, но в третьем посте вы были правы тоже.
Я разобрался на половину с плагинами, как описано
тут
. Нужно их класть рядом, папочками.
Цитировать
в Qt 4.4.2 с опциями по умолчанию вас ждёт облом с плагинами.
А как быть? Манифест полностью для плагинов не спасает, необходимо Redistributable Package доустанавливать.
«
Последнее редактирование: Сентябрь 22, 2008, 18:41 от Flakes
»
Записан
SubV
Гость
Re: VC90.CRT зависимость
«
Ответ #11 :
Ноябрь 17, 2008, 16:19 »
Подмена манифеста - неполное решение проблемы.
К счастью, решение есть. Необходимо пропатчить библиотеку msvcr90.dll, прописав mov eax,1 / ret по адресу 0x21BE0. ( По этому адресу располагается начало функции _check_manifest, от которой, собственно - всё зло
).
В общем, для msvcr90.dll прописываем hex-редактором комбинацию байт B8 01 00 00 00 C3 по адресу 0x21BE0 (для msvcr80.dll соответствующим адресом будет 0x1D76). Компилим проект без манифеста, бросаем dll'ки в папку с программой... всё, как в старые, добрые времена. Запускаем программу, всё работает без manifest hell и vc redist'ов.
edit:
Проверено на билдах 8.0.50727.3053, 9.0.21022.8, 9.0.30729.1. Адрес _check_manifest не меняется в пределах одной версии vc++ runtime. Если он изменится в будущих билдах, не составит никаких трудов его найти. Находим первый вызов GetSystemDirectoryW, затем поднимаемся немного выше до начала функции (mov edi,edi / push ebp).
Само собой, для использования исправленной crt в Qt-приложениях придётся перекомпилировать Qt, прописав в файле mkspecs\win32-msvc2008\qmake.conf в строке QMAKE_LFLAGS дополнительный ключ /MANIFEST:NO. Последнее сам ещё не пробовал, но скорее всего - прокатит. Отпишитесь о результатах, pls...
Удачи.
«
Последнее редактирование: Ноябрь 17, 2008, 18:07 от SubV
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: VC90.CRT зависимость
«
Ответ #12 :
Ноябрь 17, 2008, 18:07 »
А разве можно, с лицензионной точки зрения, изменять системные файлы?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
SubV
Гость
Re: VC90.CRT зависимость
«
Ответ #13 :
Ноябрь 17, 2008, 18:11 »
Цитата: panter_dsd от Ноябрь 17, 2008, 18:07
А разве можно, с лицензионной точки зрения, изменять системные файлы?
С "лицензионной точки зрения" вообще лучше всего к компьютеру не прикасаться, и при возникновении малейшей проблемы звонить в техсаппорт M$.
Впрочем, это тема для другого топика...
Записан
IMPOMEZIA
Гость
Re: VC90.CRT зависимость
«
Ответ #14 :
Ноябрь 17, 2008, 18:53 »
Цитата: Flakes
А как быть? Манифест полностью для плагинов не спасает, необходимо Redistributable Package доустанавливать.
configure.exe -no-plugin-manifests
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...