Что может привести к тому, что C ++ .exe и .dll будут работать только на той машине, на которой они были созданы? - PullRequest
1 голос
/ 19 сентября 2011

Я использую 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 »или одну из его зависимостей. Указанный модуль не найден.at BlueWave.Interop.Asio.Test.TestConsole.Main (String [] args) "* ​​1014 *

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

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

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

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

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

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

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

1 голос
/ 19 сентября 2011

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

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

...