Ошибка неопределенных символов CUDA для образцов, связанных с nvrtc
Следующая ошибка возникает, когда я пытаюсь проверить образцы установки CUDA, которые поставляются вместе с установкой (например, vectorAdd_nvrtc
):
clang++ -I../../common/inc -I/Developer/NVIDIA/CUDA-9.2/include -arch x86_64 -o vectorAdd.o -c vectorAdd.cpp
clang++ -rpath /Developer/NVIDIA/CUDA-9.2/lib -o vectorAdd_nvrtc
vectorAdd.o -L/Developer/NVIDIA/CUDA-9.2/lib -lnvrtc
Undefined symbols for architecture x86_64:
"_cuCtxCreate_v2", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
"_cuCtxSynchronize", referenced from:
_main in vectorAdd.o
"_cuDeviceGet", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
findCudaDeviceDRV(int, char const**) in vectorAdd.o
gpuDeviceInitDRV(int, char const**) in vectorAdd.o
"_cuDeviceGetAttribute", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
gpuGetMaxGflopsDeviceIdDRV() in vectorAdd.o
void getCudaAttribute<int>(int*, CUdevice_attribute_enum, int) in vectorAdd.o
"_cuDeviceGetCount", referenced from:
gpuDeviceInitDRV(int, char const**) in vectorAdd.o
gpuGetMaxGflopsDeviceIdDRV() in vectorAdd.o
"_cuDeviceGetName", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
findCudaDeviceDRV(int, char const**) in vectorAdd.o
gpuDeviceInitDRV(int, char const**) in vectorAdd.o
"_cuInit", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
gpuDeviceInitDRV(int, char const**) in vectorAdd.o
gpuGetMaxGflopsDeviceIdDRV() in vectorAdd.o
"_cuLaunchKernel", referenced from:
_main in vectorAdd.o
"_cuMemAlloc_v2", referenced from:
_main in vectorAdd.o
"_cuMemFree_v2", referenced from:
_main in vectorAdd.o
"_cuMemcpyDtoH_v2", referenced from:
_main in vectorAdd.o
"_cuMemcpyHtoD_v2", referenced from:
_main in vectorAdd.o
"_cuModuleGetFunction", referenced from:
_main in vectorAdd.o
"_cuModuleLoadDataEx", referenced from:
loadPTX(char*, int, char**) in vectorAdd.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [vectorAdd_nvrtc] Error 1
Тем не менее, это происходит только тогда, когда среда выполнения lib nvrtc
используется, т.е. vectorAdd
будет строить просто отлично. Я пробовал с несколькими различными образцами (например, clock
против clock_nvrtc
и т. д.) и опровергли тот же результат.
Я немного исследовал онлайн, и похоже, что он связан с какой-то проблемой заголовочного файла, но я не очень знаком с C++ и не знаю, как это исправить. Я вижу это в Makefile
, говорится, что nvrtc
не поддерживается на ARMv7
систем, но я не думаю, что это проблема, так как моя архитектура x86_64? Любая помощь очень ценится!
(CUDA версии 9.2. Я работаю на MAC OS 10.13.6, с Xcode 9.2, Apple LLVM версии 9.0.0. Мне нужна CUDA для pytorch, хотя я не уверен, что это актуальная проблема.)