gcc не может найти cuda_runtime.h, хотя путь указан с флагом -I (cygwin)

Я пытаюсь скомпилировать darknet для Windows, используя cygwin. У меня уже установлена ​​CUDA в Windows, и я создал символические ссылки из папок cygwin в папки Windows:

ln -sv /cygdrive/c/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v8.0/include/ /usr/local/cuda/include
ln -sv /cygdrive/c/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/v8.0/lib/x64/ /usr/local/cuda/lib64

Теперь ls /usr/local/cuda/include перечисляет файлы в папке CUDA include (включая cuda_runtime.h).

После запуска make из папки даркнета некоторые файлы компилируются до тех пор, пока не будет достигнуто convolutional_kernels.cu. Затем gcc бросает:

<built-in>: note: this is the location of the previous definition
nvcc -ccbin gcc -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ --compiler-options "-Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DGPU" -c ./src/convolutional_kernels.cu -o obj/convolutional_kernels.o
gcc: error: cuda_runtime.h: No such file or directory
gcc: error: unrecognized command line option ‘-nologo’
gcc: error: unrecognized command line option ‘-EHsc’
convolutional_kernels.cu
make: *** [Makefile:88: obj/convolutional_kernels.o] Error 1

хотя, всего за пару строк до этого:

<built-in>: note: this is the location of the previous definition
gcc -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DGPU -c ./src/lstm_layer.c -o obj/lstm_layer.o
In file included from /usr/local/cuda/include/device_types.h:53:0,
             from /usr/local/cuda/include/builtin_types.h:56,
             from /usr/local/cuda/include/cuda_runtime.h:86,
             from include/darknet.h:14,
             from ./src/activations.h:3,
             from ./src/lstm_layer.h:4,
             from ./src/lstm_layer.c:1:
/usr/local/cuda/include/host_defines.h:84:0: warning: "__cdecl" redefined
#define __cdecl

что ясно показывает, что CUDA-включения (например, cuda_runtime.h) доступны.

Единственный способ, которым я изменил makefile, это то, что я попросил nvcc явно использовать gcc вместо окна cl.exe. В строке 23 я изменил NVCC=nvcc на NVCC=nvcc -ccbin gcc

Кто-нибудь знает, как решить эту ошибку компиляции?


person zkristic    schedule 06.12.2017    source источник
comment
gcc не является официально поддерживаемым хост-компилятором для использования nvcc на платформе Windows.   -  person Robert Crovella    schedule 06.12.2017
comment
@RobertCrovella Итак, параметр -ccbin бесполезен в Windows или бесполезен только для gcc в Windows?   -  person zkristic    schedule 06.12.2017
comment
параметр -ccbin в окнах обычно используется во время компиляции из сеанса Visual Studio. Если у вас было установлено несколько версий cl.exe в Windows, вы можете использовать параметр -ccbin для выбора конкретной версии. На самом деле это не было бы разумным или необходимым из VS, поскольку среда сборки VS должна справиться с этим за вас, но если вы используете какую-то другую систему сборки, например. CMake для Windows (наряду с правильной цепочкой инструментов VS для поддержки хост-компилятора для CUDA) параметр -ccbin может быть полезен. Не уверен, почему важно, используется ли параметр -ccbin в Windows.   -  person Robert Crovella    schedule 06.12.2017
comment
@RobertCrovella В моем случае это не имеет значения ... Мне просто интересно, зачем это было, если оно бесполезно. Я не рассматривал случай, когда установлено несколько версий cl.exe. Теперь я знаю :) Вы не знаете, есть ли у nvcc планы по поддержке gcc? Думаю не я один столкнулся с этой проблемой...   -  person zkristic    schedule 06.12.2017
comment
Обычно я не могу обсуждать здесь планы на будущее. Извиняюсь.   -  person Robert Crovella    schedule 06.12.2017
comment
Не будучи в курсе, кажется, что поддержка mingw 64 бит меньше, чем родной gcc cygwin.   -  person tim18    schedule 06.12.2017
comment
@ tim18 просматривая некоторые темы на форуме разработчиков NVIDIA, люди просили об этом с 2007 года. Я не возлагаю больших надежд ни на один из этих двух вариантов. Возможно, лучше всего использовать двойную загрузку Linux вместе с Windows.   -  person zkristic    schedule 06.12.2017