什么会导致C ++ .exe和.dll只能在它构建的机器上工作?

时间:2011-09-19 13:21:25

标签: c++ visual-studio build asio

我正在使用VS2010并且正在使用这个项目。

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

最初,我下载了演示二进制文件,它会在我的机器上崩溃。在阅读了一些评论之后,它说下载源代码,构建它,(在获得ASIO SDK之后),它应该可以在您的机器上运行。这是正确的,在VS中构建它之后,它就可以在那台机器上运行。

当我将重建的.exe和.dll移动到另一台机器时,它崩溃的错误与最初下载的演示二进制文件相同。所以我不确定会导致这种情况。如何让这个C ++二进制文件在任何机器上运行?

我是C#开发人员,大部分代码都是c ++,所以有点不知所措。

BTW,这是错误信息:

“未处理的异常:System.IO.FileNotFoundException:无法加载文件或屁股 embly'Bluewave.Interop.Asio.dll'或其依赖项之一。无法找到指定的模块。在BlueWave.Interop.Asio.Test.TestConsole.Main(String [] args)“

编辑:答案在这里找到: http://msdn.microsoft.com/en-us/library/8kche8ah(v=VS.100).aspx

使用dependency walker查找缺少的.dll。

2 个答案:

答案 0 :(得分:4)

假设你的意思是你已经包含了这个dll - Bluewave.Interop.Asio.dll那么我只能想到几个解释:

  1. 机器中缺少其中一个依赖项。您可以使用Dependency Walker之类的内容来查找遗漏的内容。
  2. dll不在exe可以看到的位置(不太可能,但你永远不知道)。
  3. 缺少的dll可能是VC ++运行时的一部分,不一定是Asio的一部分。

    您构建它的机器上的输出文件夹中还有什么?

答案 1 :(得分:1)

我从Code Project下载了该演示项目,我认为问题的最可能原因是缺少Visual Studio C ++ 2008运行时依赖项。通过在计算机上安装运行时可再发行组件解决此问题。

注意:我使用Dependency Walker检查了此DLL的依赖项。你甚至可以在分析模式下运行它,这样它就会在运行时告诉你哪个依赖项确实很麻烦。