2013-04-29 194 views
0

我安装了CUDA 5.0和Arrayfire 1.9,当我编译示例文件时,它们完美地工作。Arrayfire故障:用代码退出-1073741701

如果我尝试在另一个文件夹中设置我自己的项目,当我尝试使用与af命名空间相关的任何内容时,会出现运行时错误。如果我将hello-world示例文件夹复制到另一个位置并尝试从那里编译,我会得到相同的错误。这表明了一些情况,但我不知道是什么原因,因为我没有使用外部库的经验。

错误是: “应用程序无法正确启动(0xc000007b)。单击确定关闭应用程序。”

我调试输出是:

CODE: SELECT ALL 
'DerdePoging.exe': Loaded 'C:\Users\######\Dropbox\Public\2D_CUDA_UNWRAPPER\Unwrapper_ArrayFire\DerdePoging\Debug\DerdePoging.exe', Symbols loaded. 
'DerdePoging.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 
'DerdePoging.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file 
'DerdePoging.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file 
The program '[5588] DerdePoging.exe: Native' has exited with code -1073741701 (0xc000007b). 

我已经注意到,我的CUDA_LIB_PATH和CUDA_BIN_PATH和CUDA_INC_PATH变量是不存在的(即使我已经创建了使用CUDA功能齐全的应用程序),所以我创建的那些(指向我的Cuda安装目录中它们各自的文件夹)。这并没有解决任何问题,并没有真正期待它。

当前的环境变量:

AF_PATH=C:\Program Files\AccelerEyes\ArrayFire\1.9 
CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin 
CUDA_LIB_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib 
CUDA_INC_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include 
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\ 
CUDA_PATH_V5_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\ 

那些前3可以使用\,当我添加了这些变量,所以我不认为它很重要,虽然没有什么变化。

我想我在创建我的VS2010项目时缺少一些关键步骤。 StackOverflow告诉我这可能是一个缺少运行时.dll。 所以这里最重要的是这些例子工作正常,但是在不同的地点,他们没有。我认为将其缩小到一些包含相对而非绝对定义的包含路径。

不知道是否是相关的,但我会在这里反正张贴:

使用的NVIDIA GeForce 540M 1GB内存。英特尔i5 2410M双核CPU。 (华硕k53sv)

在此先感谢。

更新:

以下这些具体步骤提供了以下错误:

1>Release\main.obj : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64' 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

更新:

我会尽力让它在VS2010专业版,其中包含一个64位的构建工作配置

最终更新: 好吧,如果我不得不解释我的过去的自我(所以这篇文章有一些价值的人谁拥有了同样的错误),我会这样说: -hardcode的包括的东西,因为环境变量行事怪异 -push VS2010中的每一个配置步骤之后应用(或他们不会被保存) -get VS2010临所以你可以选择x64平台(这是关键的,可能导致第一个错误2012不能正常工作)

+0

异常代码0xc000007b是STATUS_INVALID_IMAGE_FORMAT。您正试图加载一个包含无法在您的进程中执行的代码的DLL。通常从尝试在32位进程中加载​​64位DLL。或者相反。如果您不知道该DLL可能是什么,那么SysInternals的ProcMon可以向您展示。 – 2013-04-29 18:08:52

+0

请注意,我位于64位机器上,但是我构建的是带有x64 DLL的Win32平台,这可能也会导致问题。 – 2013-05-01 18:20:11

回答

2

你说得对CUDA_LIB_PATHCUDA_INC_PATH是无关紧要的(因为CUDA 5.0)。AccelerEyes已经更新了ArrayFire库的最新版本,但是如果你有一个较老的版本,那么你的Visual Studio项目可能仍然依赖于旧的(CUDA_X_PATH)路径而不是新的版本。由于这些示例运行正常,我认为你的问题只是你没有指定Visual Studio项目中的所有依赖关系...

首先,我建议确保ArrayFire.dll位于系统路径中: 。设置环境变量PATH="%PATH%;%AF_PATH%\lib64"(假设你是一个64位计算机上这使运行时找到ArrayFire DLL

现在修复的Visual Studio生成:

  1. 打开项目属性
  2. "C/C++""General"下确保"Additional Include Directories"包含"%CUDA_PATH%\include""%AF_PATH%\include"
  3. "Linker""General"确保"Additional Library Directories"包含"%CUDA_PATH%\lib\x64""%AF_PATH%\lib64"
  4. "Linker""Input"下也确保"Additional Dependencies"包含"libaf.lib"并可能"libafGFX.lib"