我正在使用GPU支持在Ubuntu 16.04上编译Darknet。 Nvidial工具包版本8.0 RC
我遇到了错误:
nvcc --gpu-architecture=compute_52 --gpu-code=compute_52 -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ --compiler-options "-Wall -Wfatal-errors -Ofast -DOPENCV -DGPU" -c ./src/convolutional_kernels.cu -o obj/convolutional_kernels.o
/usr/local/cuda/include/surface_functions.h(134): error: expected a ";"
/usr/local/cuda/include/surface_functions.h(135): error: expected a ";"
/usr/local/cuda/include/surface_functions.h(136): error: expected a ";"
错误行中的/usr/local/cuda/include/surface_functions.h有这样的内容:
template<> __device__ __cudart_builtin__ char surf1Dread(surface<void, cudaSurfaceType1D> surf, int x, enum cudaSurfaceBoundaryMode mode) asm("__surf1Dread_char") ;
有什么建议吗?
答案 0 :(得分:9)
如果您安装了多个版本的CUDA并且需要它们(像我一样),我建议您将以下内容添加到您的(BASH)RC中:
# DARKNET
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
来源你的RC('。〜/ .bashrc')和complilation有效!
答案 1 :(得分:7)
当您的环境在编译过程中使用不同版本的 nvcc 二进制文件和cuda 包含文件时,就会发生这种情况。
Darknet使用 / usr / local / cuda / include / 作为其包含路径 但在执行nvcc二进制文件时依赖于你 PATH 。它可能属于系统中的另一个cuda安装。
为避免这种情况,请强制shell在/ usr / local / cuda / bin / nvcc中搜索nvcc。
这可以通过在Makefile中黑客nvcc路径来完成:
替换 NVCC = nvcc NVCC = / usr / local / cuda / bin / nvcc
或通过为make命令修改PATH变量(更简单和与会话相关)
PATH=/usr/local/cuda/bin:$PATH make
答案 2 :(得分:4)
此错误是因为nvcc版本7.5
看起来通过deb文件安装Cuda toolkit 8.0 RC没有nvcc版本8 我已经安装cuda_8.0.27_linux.run重新安装了cuda,它现在适用于我