Russian Qt Forum
Ноябрь 05, 2024, 22:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: VC90.CRT зависимость  (Прочитано 41441 раз)
SubV
Гость
« Ответ #15 : Ноябрь 17, 2008, 19:22 »

Кстати.

Поискать решение проблемы WinSxS и "Manifest Hell" меня заставил дистрибутив бесплатной программы FictionBook Editor, поставляющейся с msvcr90.dll в папке с приложением, но без vc++ redist.

Со временем, надеюсь, в M$ откажутся от WinSxS (хотя бы частично) - ибо идея была крайне неудачной и породила больше проблем, чем решила. WinSxS хорош для системных компонент и приложений, плотно интегрированных в ОС (IE, Office, Visual Studio etc) - но не для приложений пользователя. "DLL hell" же - давно в прошлом, с тех пор, как правилом хорошего тона стало поставлять все необходимые библиотеки в одной папке с программой.

edit:

Пересобрал Qt 4.4.3 следующим образом:

- удалил всё содержимое из файлов embed_manifest_dll.prf и embed_manifest_exe.prf (они лежат в Qt\4.4.3\mkspecs\features\win32\);
- в qmake.conf прописал QMAKE_LFLAGS = /NOLOGO /MANIFEST:NO (файл находится в директории Qt\4.4.3\mkspecs\win32-msvc2008\);
- запустил configure / nmake.

Сделал пробный Qt-проект из одного диалога, в настройках указал Generate Manifest: No и Embed Manifest: No. В папку с скомпилированным exe-файлом положил QtCore4.dll, QtGui4.dll, msvcp90.dll и пропатченный msvcr90.dll.

Всё работает без установки VC++ Redist - проверено на чистой WinXP SP3.
« Последнее редактирование: Ноябрь 18, 2008, 16:10 от SubV » Записан
BaltikS
Гость
« Ответ #16 : Ноябрь 19, 2008, 09:00 »

Как писал crossly, Надо исправить с MD на MT в нужном файле и configure / nmake, проверено мной на 4.4.3 вообще кроме QtCore и QtGui ничего не требует, даже msvcr80.dll (для VC 2005), проверено на голой XP SP2 и SP3. Но не пашут только плагины в 98... А так все зависимости удовлетворены!
Записан
mks56
Гость
« Ответ #17 : Ноябрь 20, 2008, 11:45 »

Полное решение проблемы: сборка полностью статической библиотеки qt без зависимостей от run-time С и C++. Размер exe-шника при это минимум 5-6Мб
Записан
BaltikS
Гость
« Ответ #18 : Ноябрь 20, 2008, 13:00 »

Это не решение проблемы! Если я использую плагины, данное решение абсолютно не приемлемо!
Записан
Detonator
Гость
« Ответ #19 : Ноябрь 20, 2008, 21:53 »

если ты оспользуешь фиксированый набор плагинов - скомпили их со статикой. Если динамически подгружаешь свои плагины тогда другое дело.
Я к примеру все плагины к програме делаю на скриптах, и статику можно использовать, и расширяемость большая, и пользователям свои плагины делать проще.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #20 : Ноябрь 20, 2008, 22:52 »

Не так страшен манифест, как кажется.
Ну болтается возле бинарника ~2 Мб DLL...
QT DLL - ~ 5Мб.
И все ОК Смеющийся
Записан

Как мало времени и как много нужно узнать
Flakes
Гость
« Ответ #21 : Сентябрь 06, 2009, 22:12 »

Сори, что поднимаю старую тему...

Цитировать
но она присутствует от самой Qt (как скомпилировать без зависимости - большой для меня вопрос)
а что если подправить в qmake.conf....
Код:
QMAKE_CFLAGS_RELEASE	= -O2 -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd

Я залез в соответствующий qmake.conf, поправил на MT, а толку никакого. Так же в проекте в VS поставил C++ -> Code Generation -> Runtime Library -> /MT и Linker -> Input -> Ignore Specific Library -> msvcrt. Мой проект компилится, но если пытаюсь запустить на какой нить Win2K - оно просит MSVCP90.dll.

Или мне надо весь Qt пересобирать из-за этого (и еще надеюсь не static)?
Записан
shadone
Гость
« Ответ #22 : Сентябрь 09, 2009, 14:44 »

Сори, что поднимаю старую тему...

Цитировать
но она присутствует от самой Qt (как скомпилировать без зависимости - большой для меня вопрос)
а что если подправить в qmake.conf....
Код:
QMAKE_CFLAGS_RELEASE	= -O2 -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd

Я залез в соответствующий qmake.conf, поправил на MT, а толку никакого. Так же в проекте в VS поставил C++ -> Code Generation -> Runtime Library -> /MT и Linker -> Input -> Ignore Specific Library -> msvcrt. Мой проект компилится, но если пытаюсь запустить на какой нить Win2K - оно просит MSVCP90.dll.

Или мне надо весь Qt пересобирать из-за этого (и еще надеюсь не static)?
опция -MT говорит собирать с static runtime library. Qt не поддерживает эту опцию. (я бы даже сказал - Qt собранная с этой опцией гарантированно работать не будет).

по сути изначального вопрос я бы посоветовал разобраться с манифестами и устанавливать c++ runtime redistributable модули. У распространении msvcr90.dll вместе с приложением в каталоге с бинарником есть огромнейший минус - динамический линкер подгрузит ее в память повторно.
Записан
Flakes
Гость
« Ответ #23 : Октябрь 20, 2009, 01:16 »

Смог разобраться. Скомпилил Qt c /MT и все хорошо линкуется статически вместе сплагинами, никаких левых библиотек и файлов, один екзещник, который работает даже на win2000.
Записан
Naihil
Новичок

Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #24 : Сентябрь 07, 2010, 09:40 »

Здравствуйте, люди добрые! Прошу прощения за поднятие старой темы.
Возникла необходимость в сборке проекта в VS2008 и появилось несколько вопросов с манифестами и зависимостями.
1. Стоит VS2008 Express SP1. Создаю обычное win32 приложение. Студия создаёт следующий манифест:
Код:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>
Хотя в <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT версия 30729.1
Dependency Walker при профайле загружает "c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e\MSVCR90.DLL"
Скопировал <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT в папку с этим приложением и попробовал запустить на чистой системе. Получил ошибку - приложение неправильно сконфигурировано.  Почему манифест создаётся с более старой версией библиотек, а не с версией VS2008?
2. Создаю простое Qt приложение. При компиляции создаётся такой манифест:
Код:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>
На чистой системе также появляется ошибка о неправильном конфигурировании, хотя папка <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC90.CRT присутствует в папке с бинарником. Нужно ли в данном случае в файле Microsoft.VC90.CRT.manifest прописать ещё и COMCTL32.DLL?
Знаю, что рекомендуется ставить C++ redist, но хотелось бы разобраться с этим способом.
Записан
Naihil
Новичок

Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #25 : Сентябрь 07, 2010, 14:57 »

Порывшись в интернетах, выяснил, что для сборки с текущей версией рантайм библиотек в VS2008SP1 необходимо задать директиву
#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
в каждом проекте.
Вопрос с COMCTL32.DLL пока остаётся открытым
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.204 секунд. Запросов: 23.