Ошибка связи с CUDA 7.5 в Windows 10 (из проекта Theano): ошибка MSVCRT.lib LNK2019: неразрешенный внешний символ
Я пытаюсь правильно настроить CUDA, чтобы использовать преимущества графического процессора в Theano.
После исправления многих проблем компиляции путем настройки моего .theanorc
а также nvcc.profile
файлы, я изо всех сил пытаюсь исправить эту ошибку связывания:
mod.cu(735): warning: conversion from pointer to smaller integer
mod.cu(1019): warning: statement is unreachable
mod.cu(735): warning: conversion from pointer to smaller integer
mod.cu(1019): warning: statement is unreachable
mod.cu
Creating library C:/Users/niluje/AppData/Local/Theano/compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.10-64/cuda_ndarray/cuda_ndarray.lib and object C:/Users/niluje/AppData/Local/Theano/compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.10-64/cuda_ndarray/cuda_ndarray.exp
MSVCRT.lib(atonexit.obj) : error LNK2019: unresolved external symbol __imp_EncodePointer referenced in function __atonexitinit
MSVCRT.lib(crtdll.obj) : error LNK2001: unresolved external symbol __imp_EncodePointer
MSVCRT.lib(atonexit.obj) : error LNK2019: unresolved external symbol __imp_DecodePointer referenced in function _onexit
MSVCRT.lib(crtdll.obj) : error LNK2001: unresolved external symbol __imp_DecodePointer
MSVCRT.lib(gs_report.obj) : error LNK2019: unresolved external symbol __imp_IsDebuggerPresent referenced in function __raise_securityfailure
MSVCRT.lib(gs_report.obj) : error LNK2019: unresolved external symbol IsProcessorFeaturePresent referenced in function __report_gsfailure
MSVCRT.lib(gs_support.obj) : error LNK2019: unresolved external symbol __imp_QueryPerformanceCounter referenced in function __security_init_cookie
MSVCRT.lib(gs_support.obj) : error LNK2019: unresolved external symbol __imp_GetCurrentProcessId referenced in function __security_init_cookie
MSVCRT.lib(gs_support.obj) : error LNK2019: unresolved external symbol __imp_GetCurrentThreadId referenced in function __security_init_cookie
MSVCRT.lib(gs_support.obj) : error LNK2019: unresolved external symbol __imp_GetSystemTimeAsFileTime referenced in function __security_init_cookie
MSVCRT.lib(dllmain.obj) : error LNK2019: unresolved external symbol __imp_DisableThreadLibraryCalls referenced in function DllMain
C:/Users/niluje/AppData/Local/Theano/compiledir_Windows-8-6.2.9200-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.10-64/cuda_ndarray/cuda_ndarray.pyd : fatal error LNK1120: 9 unresolved externals
Вот мой .theanorc
файл:
[global]
device = gpu
floatX = float32
[cuda]
root = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
[nvcc]
flags = --use-local-env --cl-version=2013 -LC:\Users\niluje\Anaconda\Lib;
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64
А вот мой nvcc.profile
файл:
TOP = $(_HERE_)/..
NVVMIR_LIBRARY_DIR = $(TOP)/nvvm/libdevice
PATH += $(TOP)/open64/bin;$(TOP)/nvvm/bin;$(_HERE_);$(TOP)/lib;
INCLUDES += "-I$(TOP)/include" "-IC:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" "-IC:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" $(_SPACE_)
LIBRARIES =+ $(_SPACE_) "/LIBPATH:$(TOP)/lib/$(_WIN_PLATFORM_)" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64" "/LIBPATH:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib"
CUDAFE_FLAGS +=
PTXAS_FLAGS +=
Кажется, что это не редкая ошибка, но обычно исправления включают изменение некоторых параметров в проекте Visual Studio. Однако здесь у меня нет проекта Visual Studio. Код динамически генерируется Theano и компилируется во время выполнения.
Соответствующие настройки системы:
- Windows 10 (да...)
- Python 2.7.10 64bit (Анаконда, дистрибутив)
- CUDA 7.5 / драйвер NVIDIA 353.54 / GeForce GTX 760
- Visual Studio Community 2013
2 ответа
Черт! Я понял это сразу после публикации вопроса. Решение: немного разные папки include и библиотеки:
TOP = $(_HERE_)/..
NVVMIR_LIBRARY_DIR = $(TOP)/nvvm/libdevice
PATH += $(TOP)/open64/bin;$(TOP)/nvvm/bin;$(_HERE_);$(TOP)/lib;
INCLUDES += "-I$(TOP)/include" "-IC:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" "-IC:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include" $(_SPACE_)
LIBRARIES =+ $(_SPACE_) "/LIBPATH:$(TOP)/lib/$(_WIN_PLATFORM_)" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64"
CUDAFE_FLAGS +=
PTXAS_FLAGS +=
В частности я перешел с:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\
чтобы:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A
(Я думал, что я должен был использовать Program Files
из-за моего 64-битного проекта, но на самом деле 64-битные файлы также включены в Program Files (x86)
)
Я также хотел бы поблагодарить вас. Я пытался заставить это работать часами, и это был пост, который поставил меня в тупик. Мой конфиг был немного другим, поэтому мои настоящие ссылки были другими. Я публикую их на случай, если это поможет кому-то еще
.theanorc
[global]
device = gpu
floatX = float32
[nvcc]
flags = --use-local-env --cl-version=2008
nvcc.profile
TOP = $(_HERE_)/..
NVVMIR_LIBRARY_DIR = $(TOP)/nvvm/libdevice
PATH += $(TOP)/open64/bin;$(TOP)/nvvm/bin;$(_HERE_);$(TOP)/lib;
INCLUDES += "-I$(TOP)/include" "-I$(TOP)/include/cudart" "-IC:/Program Files (x86)/Common Files/Microsoft/Visual C++ for Python/9.0/VC/include" "-IC:\Program Files\Microsoft SDKs\Windows\v7.1\Include"$(_SPACE_)
LIBRARIES =+ $(_SPACE_) "/LIBPATH:$(TOP)/lib/$(_WIN_PLATFORM_)" "/LIBPATH:C:/Program Files (x86)/Common Files/Microsoft/Visual C++ for Python/9.0/VC/lib/amd64" "/LIBPATH:C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"
CUDAFE_FLAGS +=
OPENCC_FLAGS +=
PTXAS_FLAGS +=
Использование: Windows 7, 64-битная CUDA 5.5 Python 2.7 Windows SDK 7.1 Microsoft Visual C++ Компилятор для Python 2.7