Почему nvcc не может скомпилировать файл CUDA с boost :: spirit? - PullRequest
2 голосов
/ 15 ноября 2011

Я пытаюсь интегрировать CUDA в существующее приложение, которое использует boost :: spirit.

Изолируя проблему, я обнаружил, что следующий код не копируется с nvcc:

main.cu:

#include <boost/spirit/include/qi.hpp>
int main(){
    exit(0);
}

Компиляция с nvcc -o cudaTest main.cu Я получаю много ошибок, которые можно увидеть здесь .

Но если я изменю имя файлана main.cpp и скомпилируйте снова, используя nvcc, все работает.Что здесь происходит и как я могу это исправить?

1 Ответ

4 голосов
/ 15 ноября 2011

nvcc иногда возникают проблемы при компиляции сложного кода шаблона, такого как в Boost, даже если код используется только в __host__ функциях.

Когда расширение файла равно .cpp, nvcc не выполняет сам синтаксический анализ и вместо этого передает код компилятору хоста, поэтому вы наблюдаете различное поведение в зависимости от расширения файла.

Если возможно, попробуйте поместить на карантин код, который зависит от Boost, в .cpp файлыкоторые не нужно анализировать nvcc.

Я также обязательно попробую nvcc, который поставляется с последней CUDA 4.1 .Поддержка шаблонов nvcc улучшается с каждым выпуском.

...