Что может привести к тому, что C++ .exe и.dll будут работать только на той машине, на которой они были созданы?

Я использую VS2010 и работаю с этим проектом.

http://www.codeproject.com/KB/audio-video/Asio_Net.aspx

Сначала я скачал демонстрационный бинарный файл, и он завис на моей машине. Прочитав некоторые комментарии, он сказал, что нужно загрузить исходный код, собрать его (после получения ASIO SDK), и он должен работать на вашем компьютере. Это правильно, после сборки в VS он работает на этой машине.

При переносе восстановленных.exe и.dll на другой компьютер происходит сбой с той же ошибкой, что и у первоначально загруженного демонстрационного двоичного файла. Так что я не уверен, что может быть причиной этого. Как я могу заставить этот двоичный файл C++ работать на любой машине??

Я разработчик на C#, и большая часть кода написана на C++, так что я немного растерялся.

Кстати, вот сообщение об ошибке:

"Необработанное исключение: System.IO.FileNotFoundException: не удалось загрузить файл или задницу, вклинивать" Bluewave.Interop.Asio.dll "или одну из его зависимостей. Указанный модуль не найден. В BlueWave.Interop.Asio.Test.TestConsole.Main(String[] args)"

РЕДАКТИРОВАТЬ: Ответ найден здесь: http://msdn.microsoft.com/en-us/library/8kche8ah(v=VS.100).aspx

Используйте средство обхода зависимостей, чтобы найти, какой DLL отсутствует.

2 ответа

Решение

Предполагая, что вы имеете в виду, что вы включили эту DLL - Bluewave.Interop.Asio.dll тогда есть только несколько объяснений, которые я могу придумать:

  1. Одна из его зависимостей отсутствует в машине. Вы можете использовать что-то вроде Dependency Walker, чтобы узнать, чего не хватает.
  2. DLL не находится в месте, которое может видеть exe (маловероятно, но вы никогда не знаете).

Отсутствующая DLL вполне может быть частью среды выполнения VC++ и не обязательно частью Asio.

Что еще находится в выходной папке на машине, где вы его построили?

Я скачал этот демонстрационный проект из Code Project, и я думаю, что наиболее вероятной причиной проблемы является отсутствие зависимости времени выполнения Visual Studio C++ 2008. Решите это, установив распространяемый пакет времени выполнения на машине.

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

Другие вопросы по тегам