繁体   English   中英

Visual Studio C++ 编译器尝试编译 CUDA C/C++ 文件

[英]Visual Studio C++ compiler tries to compile CUDA C/C++ files

我正在尝试制作一个我一直在使用 CUDA 的项目。 目前它有四个构建配置,两个(发布和调试)定义了一个编译器符号,因此它使用 CUDA 进行编译,另外两个(发布和调试)将其定向到 CPU 代码。

这是 main.cpp 的简短版本:

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

int main() {
    functionDefinedinBothHeaders(params);
}

但由于某种原因,NVCC 可以正常运行并编译它,但随后 C++ 编译器尝试编译它,这会导致许多错误,我已经设法使用#ifdef __NVCC__语句规避了这些错误,但现在我遇到了 main.cpp 必须使用某些东西的问题从 header 所以我把它放在#ifdef __NVCC__语句之外,现在我得到 linker 错误,因为它们被定义了两次,因为 NVCC 编译它并且 ZF6F87C9FDCF8B3C3F07F93F1EE81 也一样

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++ 代码。 我该如何阻止它这样做? 有没有比我正在做的更好的方法?

Robert Crovella answered my question in the comments, what I needed to do was have a header function that was included in main.cpp and CUDACode.cu and contained the function prototype for functionDefinedinBothHeaders but CUDACode.cu defined it

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM