0

我安装了 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 中工作

最终更新:好的,所以如果我必须向过去的自己解释这一点(所以这篇文章对有同样错误的人有一些价值)我会这样说:-硬编码包含的东西,因为环境变量的行为很奇怪 -push apply在 VS2010 中的每一个配置步骤之后(或者它们不会被保存)-get VS2010 Pro所以你可以选择 x64 平台(这很关键,可能导致第一个错误,2012 不能正常工作)

4

1 回答 1

2

你是对的CUDA_LIB_PATH并且CUDA_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"
于 2013-04-29T17:56:01.997 回答