2011-09-19 13 views
1

我正在使用VS2010并正在使用此项目。什么会导致C++ .exe和.dll只能在构建它的机器上工作?

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

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

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

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

顺便说一句,这里是错误消息:

“未处理的异常:System.IO.FileNotFoundException:未能加载文件或驴 embly‘Bluewave.Interop.Asio.dll’或它的一个依赖的。指定的模块无法found.at BlueWave.Interop.Asio.Test.TestConsole.Main(字串[] args)”

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

使用的Dependency Walker找到该.dll文件不见了。

+0

是否与EXE或GAC在同一目录中的库的DLL(如果它是.NET库)? – 2011-09-19 13:22:56

+1

异常消息很清晰,你忘了复制DLL吗? –

+0

不会忘记.dll,它与.exe – bulltorious

回答

4

假设你是说你已经包含这个DLL - Bluewave.Interop.Asio.dll然后有一对夫妇只解释我能想到的:

  1. 一个它的依赖从机器丢失。你可以使用像Dependency Walker这样的东西来找出缺少的东西。
  2. 该DLL不在exe可以看到的位置(不太可能,但你永远不知道)。

缺少的DLL可能是VC++运行时的一部分,不一定是Asio的一部分。

在您创建机器的输出文件夹中还有什么?

+0

位于同一目录中1.您如何推荐找到缺失的依赖项? 2. .dll文件位于相同的目录中。 – bulltorious

+0

@bulltorious - 试试类似[Dependency Walker](http://www.dependencywalker.com/) – ChrisF

+0

Dependency Walker做到了这一点。罪魁祸首是msvcr100d.dll – bulltorious

1

我已经从代码项目下载了演示项目,我认为这个问题的最可能原因是缺少Visual Studio C++ 2008运行时依赖关系。通过在机器上安装运行时可再发行组件包来解决此问题。

注:我用Dependency Walker检查了这个DLL的依赖关系。你甚至可以在性能分析模式下运行它,以便它能够在运行时告诉你哪个依赖项证明是麻烦的。

相关问题