NVCC unistd.h(792):错误:预期为标识符

时间:2018-09-12 21:10:49

标签: cuda linker nvcc unistd.h

NVCC返回错误,但几乎没有信息可继续。在转移到所谓的“现代cmake”之前,该项目确实进行了编译。我不再使用findCUDA。我已经进行了多次网络搜索,但找不到帮助解决该问题的线索。 任何帮助都会很棒。谢谢。

[  3%] Building CUDA object CMakeFiles/foo_cuda.dir/src/foo/gpu/gpu_camera.cu.o
/usr/local/cuda/bin/nvcc  -DFOO_DATA_DIR=\"/home/developer/Data\" -DFOO_RESULTS_DIR=\"/home/developer/Results\" -DBAR_GFLAGS_NAMESPACE=google -DBAR_SUITESPARSE_VERSION=\"5.1.2\" -D__CUDACC__ -I/home/developer/Source/Foo/include -I/home/developer/Source/Foo/src -I/home/developer/Source/Foo -I/usr/local/include -I/usr/local/cuda/include -I/home/developer/Source/Foo/SYSTEM -I/usr/include/eigen3  -g -Xcompiler=-fPIC   -w -std=c++14 -Xcompiler=-fopenmp -use_fast_math -Wno-deprecated-declarations --expt-extended-lambda --expt-relaxed-constexpr -dc -Dlink -lcudart -lcudrand -lcudadevrt -lcublas -lcublas_device -gencode arch=compute_30,code=compute_30 -x cu -dc /home/developer/Source/Foo/src/foo/gpu/gpu_camera.cu -o CMakeFiles/foo_cuda.dir/src/foo/gpu/gpu_camera.cu.o
/usr/include/unistd.h(792): error: expected an identifier

1 个答案:

答案 0 :(得分:1)

显示/usr/include/unistd.h的第792行的内容将使人们更好地猜测答案。

通常,此错误是由于您使用冲突的#include

在您之前unistd.h #define发生的事情

例如,如果unistd.h的第792行显示为:

extern int link (const char *__from, const char *__to);

和以前的一些标头做到了:

#define link 1

然后编译器将看到(经过预处理):

extern int 1 (const char *__from, const char *__to);

,并将正确产生error: expected an identifier

诊断这类问题的一种有用方法是运行预处理器 并保存所有#define的值。使用GCC:

gcc -E -dD -I... foo.c > foo.e

类似的标记(-E -dD)可能适用于nvcc,或者您可能必须找到等效的标记。

更新

正如罗伯特·克罗维拉(Robert Crovella)所指出的那样,您实际上在命令行上有-Dlink,因此您的unistd.h可能与我的匹配,而extern int 1 (const char ...是>完全您的编译器在预处理后会看到什么。

不要这样做!也就是说,不要#define标准标识符(无论是在命令行上还是在代码中的其他任何地方)。