2013-04-29 195 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"