NVCC unistd.h (792): ошибка: ожидается идентификатор - PullRequest
0 голосов
/ 13 сентября 2018

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 голосов
/ 13 сентября 2018

Отображение содержимого строки 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 с. С GCC:

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

Подобные флаги (-E -dD) могут работать для nvcc, или вам, возможно, придется найти что-то эквивалентное.

Обновление:

Как заметил Роберт Кровелла, у вас на самом деле есть -Dlink в командной строке, поэтому вполне вероятно, что ваш unistd.h совпадает с моим, а extern int 1 (const char ... равен точно как ваш компилятор видит после предварительной обработки.

Не делать это ! То есть не #define стандартные идентификаторы (ни в командной строке, ни где-либо еще в вашем коде).

...