Ошибка генерируется, когда Makefile пытается скомпилировать файл .cu (CUDA).
Мы смогли скомпилировать это самостоятельно с помощью .hpp, созданного специально для него. Когда мы пытаемся заставить его скомпилироваться в существующий заголовок с собственным .cpp (другими словами .hpp, .cpp плюс .cu), мы продолжаем получать эту странную ошибку компиляции.
Для удобства чтения все последующие сообщения имеют префикс этого каталога:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.4/include/g++-v4/tr1_impl/
Сообщения:
type_traits(226): error: expected an identifier
type_traits(227): error: expected a ")"type_traits(227): error: a template argument list is not allowed in a declaration of a primary template
type_traits(229): error: expected an identifier
type_traits(230): error: expected a ")"type_traits(230): error: a template argument list is not allowed in a declaration of a primary template
type_traits(232): error: expected an identifier
type_traits(233): error: expected a ")"type_traits(233): error: expected a ">"
type_traits(235): error: expected an identifier
type_traits(236): error: expected a ")"type_traits(236): error: expected a ">"
type_traits(238): error: expected an identifier
type_traits(239): error: expected a ")"type_traits(239): error: expected a ">"
type_traits(241): error: expected an identifier
type_traits(242): error: expected a ")"type_traits(242): error: expected a ">"
type_traits(244): error: expected an identifier
type_traits(245): error: expected a ")"type_traits(245): error: expected a ">"
type_traits(247): error: expected an identifier
type_traits(248): error: expected a ")"type_traits(248): error: expected a ">"
Возможно ли иметь единственный .hpp с .cu и .cpp позади него?
Да, это возможно, и на самом деле очень распространено, но если .hpp включает файлы, которые nvcc не может создать, то вы не можете включить его из .cu.
Вы могли бы использовать #ifndef __CUDACC__
вокруг этих файлов, чтобы они не включались при компиляции .cu с помощью nvcc.
Других решений пока нет …