Я пытаюсь создать проект, над которым я работаю, использую 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 ++. Как я могу остановить это от этого? и есть ли лучший способ, чем то, что я делаю?