Ошибка неопределенных символов 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, хотя я не уверен, что это актуальная проблема.)

0 ответов

Другие вопросы по тегам