Проблема с Arrayfire: выход с кодом -1073741701

Я установил 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 среды выполнения. Ключевое значение здесь имеет то, что примеры работают нормально, но не работают в разных местах. Я думаю, что это сужает его до некоторого пути включения, который определяется относительным, а не абсолютным.

Не уверен, что актуально, но все равно напишу здесь:

с использованием NVIDIA GeForce 540M с 1 ГБ памяти. Двухъядерный процессор Intel i5 2410M. (Асус к53св)

Заранее спасибо.

Обновлять:

выполнение этих точных шагов дает следующую ошибку:

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 Professional, который содержит конфигурацию сборки x64.

Заключительное обновление: хорошо, если бы мне пришлось объяснять это самому себе в прошлом (поэтому этот пост имеет некоторую ценность для людей, у которых такая же ошибка), я бы сказал следующее: после каждого отдельного шага настройки в VS2010 (иначе они не будут сохранены) - получить VS2010 Pro чтобы вы могли выбрать платформу x64 (это критично и, вероятно, вызвало первую ошибку, 2012 НЕ работает должным образом )


person Jan M.    schedule 29.04.2013    source источник
comment
Код исключения 0xc000007b — STATUS_INVALID_IMAGE_FORMAT. Вы пытаетесь загрузить DLL, содержащую код, который не может выполняться в вашем процессе. Обычно при попытке загрузить 64-битную DLL в 32-битный процесс. Или наоборот. Если вы понятия не имеете, что это за DLL, ProcMon от SysInternals может показать вам.   -  person Hans Passant    schedule 29.04.2013
comment
Обратите внимание, что у меня 64-битная машина, но я строю для платформы Win32 с x64 DLL, что тоже может вызвать проблему.   -  person Jan M.    schedule 01.05.2013


Ответы (1)


Вы правы в том, что 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-битной машине. Это позволит вашей среде выполнения найти dll ArrayFire.

Теперь, чтобы исправить сборку 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"
person AccelerEyes Software Engineer    schedule 29.04.2013