【发布时间】:2013-04-29 15:38:20
【问题描述】:
我安装了 CUDA 5.0 和 Arrayfire 1.9,当我编译示例文件时,它们运行良好。
如果我尝试在不同的文件夹中设置我自己的项目,当我尝试使用与 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。 因此,这里最重要的是示例可以正常工作,但在不同的位置,它们却不能。我认为这将其缩小到一些定义为相对而不是绝对的包含路径。
不确定是否相关,但无论如何我都会在这里发布:
使用具有 1GB 内存的 NVIDIA geForce 540M。 Intel 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 ==========
更新:
我会尝试让它在包含 x64 构建配置的 VS2010 Professional 中工作
最终更新: 好的,所以如果我不得不向过去的自己解释这一点(所以这篇文章对有同样错误的人有一定的价值)我会这样说: -硬编码包含的东西,因为环境变量的行为很奇怪 - 在 VS2010 中的每一个配置步骤之后推送应用(否则它们不会被保存) -get VS2010 Pro 所以你可以选择x64平台(这很关键,可能导致第一个错误,2012不能正常工作)
【问题讨论】:
-
异常代码 0xc000007b 是 STATUS_INVALID_IMAGE_FORMAT。您正在尝试加载包含无法在您的进程中执行的代码的 DLL。通常来自尝试在 32 位进程中加载 64 位 DLL。或者反过来。如果你不知道那个 DLL 可能是什么,那么 SysInternals 的 ProcMon 可以告诉你。
-
请注意,我使用的是 64 位机器,但我使用 x64 DLL 为 Win32 平台构建,这也可能导致问题。
标签: visual-studio-2010 cuda arrayfire