Здравствуйте, Коллеги!
Столкнулся со странной трудностью, прошу помощи.
Кратко:
плагин в видел dll не запускается, хотя все остальные плагины, собранные на этой же машине загружаются. Depends говорит о единственной ошибке:
Error: The Side by Side configuration information for путь к плагину dll.
На моем компьютере, где я собираю проект целиком - все работает и этой ошибки нет.
На всех компьютерах коллег - тоже все ок.
На относительно чистой винде - тоже все ок.
А вот на компьютерах на объекте такая зараза.
Подробнее:
Проект C++, Qt 4.8.6, компилятор Visual Studio 2008. x86. Windows 7.
Структура собранного проекта следующая. Рядом с exe файлом лежат всякие qt'шные dll и dll, которые относятся к ядру. Там же лежит папка plugins, которая содержит dll всех плагинов для проекта, в ней же лежит мой злосчастный плагин.dll.
Все плагины из папки plugins загружаются динамически во время старта приложения. Если какой-то плагин упал, или у него проблемы с зависимостями, то его в открывшейся программе просто не будет.
Дополнительные сложности создает то, что объект далеко, там нет интернета, team viewer и т.п. Все что можно - отправлять туда коллеге файлы/архивы и пробовать их запускать.
Подчеркиваю, что весь проект вместе со всеми плагинами собирается из Qt Creator одновременно с моим плагином и с теми же настройками компиляции, грубо говоря одной кнопкой.
Особенности моего плагина: он использует boost. Но boost в него включен не как либы, а вместе с cpp и h - вытаскивал нужные мне части встроенной в boost программкой.
Что я пробовал, поразмыслив и погуглив:
1. Пересобрал все целиком и отправил - не помогло.
2. Взял с моего компьютера msvr90.dll, msvcp90.dll, отправил на объект, чтобы положили рядом с проектом. Результата никакого.
3. Второй ответ вот
отсюда. Первый отпадает, т.к. приложение запускается и другие плагины загружаются.
4. Заглянул в манифест dll моего планига и сравнил с другими. Они отличаются, но что это значит, я не знаю. Манифест моего плагина:
<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>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.OpenMP" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
</dependency>
</assembly>
Манифест других:
<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>
Т.е. в моем плагине есть какой-то блок с
Microsoft.VC90.OpenMP. Может в этом дело? Но как жить с этим дальше?
Спасибо!