cuda - NVCC unistd.h(792):错误:需要一个标识符
问题描述
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
解决方案
显示第 792 行的内容/usr/include/unistd.h
可以让人们更好地猜测答案。
通常,此错误是由于您#include
在 unistd.h
使用冲突的#define
例如,如果第 792 行unistd.h
读取:
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
s 的值。使用 GCC:
gcc -E -dD -I... foo.c > foo.e
类似的标志 ( -E -dD
) 可能适用于nvcc
,或者您可能必须找到等效的标志。
更新:
正如 Robert Crovella 所指出的,您实际上已经-Dlink
在命令行上,因此您很可能unistd.h
与我的匹配,并且extern int 1 (const char ...
正是您的编译器在预处理后看到的内容。
不要那样做!也就是说,不要#define
使用标准标识符(在命令行或代码中的任何其他位置)。
推荐阅读
- javascript - 我应该在反应或任何单页应用程序中使用 reCAPTCHA
- javascript - 列表中的每个孩子都应该有一个唯一的 key prop
- python - 使用生成器递归组合算法
- ruby-on-rails - 导轨;安装 Sidekiq 后的自动加载问题:ArgumentError(Api::V1 的副本已从模块树中删除,但仍处于活动状态!):
- javascript - switch语句上的javascript意外行为
- c# - C# 向程序添加大量声音并随机选择播放的最佳方法?
- docusignapi - 是否可以在我的应用程序中签署 pdf 而不是重定向到文档
- algorithm - 动态规划在现实世界编程中的应用
- python-3.x - 为什么会出现错误:“文件“stdin1”,第 1 行,无效语法”
- history - history.go(-1) 无法在IOS14 Beta2 App中运行