NVCC unistd.h(792): error: expected an identifier
NVCC unistd.h(792): error: expected an identifier
NVCC 正在返回一个错误,但几乎没有信息可以继续。该项目在移动到所谓的 'modern 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
显示第 792 行的内容 /usr/include/unistd.h
可以让人们更好地猜测答案。
通常此错误是由于您 #include
在 unistd.h
使用冲突的 #define
例如,如果 unistd.h
的第 792 行显示为:
extern int link (const char *__from, const char *__to);
和之前的一些 header 是这样做的:
#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
标准标识符(无论是在命令行上,还是代码中的其他任何地方)。
NVCC 正在返回一个错误,但几乎没有信息可以继续。该项目在移动到所谓的 'modern 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
显示第 792 行的内容 /usr/include/unistd.h
可以让人们更好地猜测答案。
通常此错误是由于您 #include
在 unistd.h
使用冲突的 #define
例如,如果 unistd.h
的第 792 行显示为:
extern int link (const char *__from, const char *__to);
和之前的一些 header 是这样做的:
#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
标准标识符(无论是在命令行上,还是代码中的其他任何地方)。