Компилятор Visual Studio C ++ пытается скомпилировать файлы CUDA C / C ++ - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать проект, над которым я работаю, использую CUDA. На данный момент у него есть четыре конфигурации сборки, две (версия и отладка), которые определяют символ компилятора, чтобы он компилировался с CUDA, и две (версия и отладка), которые вместо этого направляют его в код процессора.

Это короткая версия main. cpp:

#ifdef CUDA
#include "CUDACode.cu"
#else
#include "CPUCode.h"
#endif

int main() {
    functionDefinedinBothHeaders(params);
}

, но по какой-то причине NV CC запускается и прекрасно ее компилирует, но потом компилятор C ++ пытается его скомпилировать, что вызывает много ошибок, с которыми я справился обойти с помощью операторов #ifdef __NVCC__, но теперь у меня есть проблема, когда main. cpp должен использовать что-то из заголовка, поэтому я помещаю его за пределы операторов #ifdef __NVCC__, и теперь я получаю ошибку компоновщика, так как они определены дважды как NV CC компилирует его, а компиляция C ++ делает также

error LNK2005: "class boost::random::mersenne_twister_engine<unsigned int,32,351,175,19,3433795303,11,4294967295,7,834054912,15,4293197824,17,1812433253> generator" (?generator@@3V?$mersenne_twister_engine@I$0CA@$0BFP@$0KP@$0BD@$0MMKLIOOH@$0L@$0PPPPPPPP@$06$0DBLGKLAA@$0P@$0PPOFAAAA@$0BB@$0GMAHIJGF@@random@boost@@A) already defined in CUDAStateCalc.cu.obj

.cu файлы установлены на код CUDA C / C ++. Как я могу остановить это от этого? и есть ли лучший способ, чем то, что я делаю?

1 Ответ

1 голос
/ 11 мая 2020

Роберт Кровелла ответил на мой вопрос в комментариях, мне нужно было иметь функцию заголовка, которая была включена в main.cpp и CUDACode.cu и содержала прототип функции для functionDefinedinBothHeaders, но CUDACode.cu определил ее

...