【问题标题】:Trouble with Arrayfire: exited with code -1073741701Arrayfire 出现问题:以代码 -1073741701 退出
【发布时间】: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


【解决方案1】:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2015-03-17
    • 2022-07-04
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多