Безумие бок о бок - запуск двоичных файлов на одном компьютере

Вот моя конфигурация:

  • Компьютер A - Windows 7, MS Visual Studio 2005 с исправлением для совместимости с Win7 (8.0.50727.867)
  • Компьютер B - Windows XP SP2, установлена ​​MS Visual Studio 2005 (8.0.50727.42)

У моего проекта есть некоторые внешние зависимости (предварительно созданные библиотеки DLL - либо созданные на A, либо загруженные из Интернета), несколько библиотек DLL, созданных из источников, и один исполняемый файл. Я в основном развиваюсь на A, и там все хорошо. В какой-то момент я пытаюсь собрать свой проект на компьютере B, копируя готовые библиотеки DLL в папку вывода. Все работает нормально, но, пытаясь запустить приложение, я получаю

Не удалось правильно инициализировать приложение (0xc0150002) ....

Журнал событий содержит два из них:

Зависимая сборка Microsoft.VC80.CRT не может быть найдена, и была последняя ошибка. Указанная сборка не установлена ​​в вашей системе.

плюс немного более забавный

Не удалось создать контекст активации для some.dll. Справочное сообщение об ошибке: операция успешно завершена.

На этом этапе я пробую свой Google-Fu, но напрасно - практически все обращения касаются запуска двоичных файлов на машинах без установленной Visual Studio. Однако в моем случае исполняемые файлы не запускаются на компьютере, на котором они созданы.

Следующим шагом было попробовать dependency walker, и это еще больше озадачило меня - мои библиотеки DLL, созданные из источников в том же самом ящике, не могут найти MSVCR80.DLL и MSVCP80.DLL, однако исполняемый файл, кажется, в порядке по отношению к этим двум библиотекам DLL, т.е. когда я открываю исполняемый файл с зависимостью walker показывает, что MSVC?80.DLLs можно найти, но когда я открываю одну из своих DLL, он говорит, что они не могут. Вот где у меня совершенно нет идей, что делать, поэтому я спрашиваю вас, дорогой stackoverflow :)

Я признаю, что я немного расплывчатый во всем, что касается параллельности, так что общее чтение по этой теме также будет оценено.


person sbk    schedule 02.01.2011    source источник
comment
Ответ в вашем вопросе, обратите внимание на несоответствие номера версии. Вам необходимо обновить B.   -  person Hans Passant    schedule 02.01.2011


Ответы (4)


В вашем вопросе есть ответ на вашу проблему: на компьютере A установлена ​​среда выполнения VC версии 8.0.50727.867, а на компьютере B - только версия 8.0.50727.42.

Вы создали свои библиотеки на компьютере A, и они зависят от версии 867 среды выполнения VC. (Это можно найти в манифесте, встроенном в библиотеки.) Когда вы копируете их на компьютер B, этим библиотекам по-прежнему требуется версия 867 среды выполнения, но у вас есть только версия 42.

Чтобы разрешить зависимости сборки среды выполнения VC, вам необходимо установить распространяемые компоненты среды выполнения VC версии 867 на компьютере B. Однако я бы посоветовал вам обновить Visual Studio на компьютере B, чтобы у вас была одинаковая версия на обоих компьютерах. А еще лучше: установите Visual Studio 2005 SP1 на оба компьютера, а затем установите это обновление безопасности до SP1. После установки последнего ваши библиотеки будут зависеть от версии 8.0.50727.4053.

person Alexey Ivanov    schedule 22.03.2011

возможно, проблема связана с разными версиями среды выполнения CRT, установленными на обеих машинах. Можно ли собрать все ваши модули для использования статически связанной среды выполнения CRT, чтобы проверить это?

person Andriy Tylychko    schedule 02.01.2011
comment
Следует отметить, что если @sbk пойдет по этому маршруту, он должен быть готов к отправке обновленных битов, поскольку для CRT выпущены исправления безопасности. Не то чтобы это обязательно плохо, но, вероятно, стоит позвонить. :) - person paulcam; 22.03.2011

сначала я проверял эти предварительно созданные библиотеки, подготовив фиктивный проект для их загрузки.

person Andriy Tylychko    schedule 02.01.2011

Недавно у меня была такая же ошибка, когда я создавал проекты на одной машине, а затем переносил их на другую. Самым большим виновником здесь, вероятно, является конфигурация отладки для одного из двоичных компонентов. То есть MSVC предъявляет довольно жесткие требования ко всем библиотекам DLL / EXE, построенным с использованием одной и той же библиотеки времени выполнения, отладки или выпуска, иначе они не будут работать вместе.

Когда у меня такое случалось, они тоже нормально компилировались, но когда вы пытаетесь запустить их, вы получаете то чрезвычайно загадочное сообщение об ошибке.

Вам необходимо убедиться, что каждый модуль, который вы создаете вместе, использует одну и ту же конфигурацию, таким образом, отлаживайте или выпускайте через всю цепочку сборки. Эта ошибка также, вероятно, связана с несоответствием в других библиотеках, поэтому убедитесь, что ваш MSVC имеет ту же версию на машинах, на которых вы собираете.

person edA-qa mort-ora-y    schedule 02.01.2011