Что может привести к тому, что 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
тогда есть только несколько объяснений, которые я могу придумать:
- Одна из его зависимостей отсутствует в машине. Вы можете использовать что-то вроде Dependency Walker, чтобы узнать, чего не хватает.
- DLL не находится в месте, которое может видеть exe (маловероятно, но вы никогда не знаете).
Отсутствующая DLL вполне может быть частью среды выполнения VC++ и не обязательно частью Asio.
Что еще находится в выходной папке на машине, где вы его построили?
Я скачал этот демонстрационный проект из Code Project, и я думаю, что наиболее вероятной причиной проблемы является отсутствие зависимости времени выполнения Visual Studio C++ 2008. Решите это, установив распространяемый пакет времени выполнения на машине.
Примечание. Я проверил зависимости этой библиотеки DLL с помощью Dependency Walker. Вы даже можете запустить его в режиме профилирования, чтобы он во время выполнения сообщал вам, какая именно зависимость вызывает проблемы.