Ubuntu 16.04,Nvidia工具包8.0 RC,暗网编译错误:预期";"

Ser*_*tin 7 c++ ubuntu cuda

我正在使用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 ";"
Run Code Online (Sandbox Code Playgroud)

错误行中的/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") ;
Run Code Online (Sandbox Code Playgroud)

有什么建议?

小智 12

因此,当您的环境使用不同版本的nvcc二进制文件并且cuda 在编译过程中包含文件时,就会发生这种情况.

Darknet使用/ usr/local/cuda/include /作为其包含路径,但在执行nvcc二进制文件时依赖于PATH.它可能属于系统中的另一个cuda安装.

为了避免这种情况,请强制shell在/ usr/local/cuda/bin/nvcc中搜索nvcc.

这可以通过在Makefile中黑客nvcc路径来完成:

NVCC =/usr/local/cuda/bin/nvcc 替换 NVCC = nvcc

或者通过为make命令修改PATH变量(更简单和与会话相关)

PATH=/usr/local/cuda/bin:$PATH make
Run Code Online (Sandbox Code Playgroud)


Abe*_*man 10

如果您安装了多个版本的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}}
Run Code Online (Sandbox Code Playgroud)

来源你的RC('.〜/ .bashrc')和complilation工作!

  • 这解决了我的问题.cuda驱动程序8.0与来自ubuntu repo的nvidia-cuda-dev/nvidia-cuda-toolkit的nvcc 7.5版相冲突.因此,明确地设置这些路径并重新运行`make`在8.0之间正确构建所有内容.注意:我不是建立暗网,来自谷歌,但类似的问题. (3认同)

Ser*_*tin 4

这个错误是因为nvcc版本7.5

看起来通过 deb 文件安装的 Cuda 工具包 8.0 RC 没有 nvcc 版本 8 我已经通过安装的 cuda_8.0.27_linux.run 重新安装了 cuda,现在它对我有用