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

StackOverflow https://stackoverflow.com/questions/4578423

  •  14-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top