Visual studio Visual Studio与Cuda的链接问题

Visual studio Visual Studio与Cuda的链接问题,visual-studio,linker,cuda,Visual Studio,Linker,Cuda,我正在使用nVidia的CUDA C进行一些编程。我正在使用Visual Studio 2008作为我的开发环境,我在一些链接方面遇到了一些问题,我想知道是否有人知道解决方法,或者有人遇到过同样的问题,可以提供解决方案 我的程序由3个文件组成。1个头文件(stuff.h)、1个C源文件(stuff.C)和1个CUDA C文件(main.cu)。(这些名字是假的,但只是为了说明这一点) 现在stuff.h/stuff.c定义/实现我从main.cu内部调用的一些助手函数 我使用的是visual s

我正在使用nVidia的CUDA C进行一些编程。我正在使用Visual Studio 2008作为我的开发环境,我在一些链接方面遇到了一些问题,我想知道是否有人知道解决方法,或者有人遇到过同样的问题,可以提供解决方案

我的程序由3个文件组成。1个头文件(stuff.h)、1个C源文件(stuff.C)和1个CUDA C文件(main.cu)。(这些名字是假的,但只是为了说明这一点)

现在stuff.h/stuff.c定义/实现我从main.cu内部调用的一些助手函数

我使用的是visual studio 2008和nVidia的GPU计算SDK中的Cuda.rules,一切都可以编译,但是。。。当涉及到将所有文件链接在一起时,它失败了。似乎stuff.h中定义的(以及stuff.c中实现的)所有函数都没有正确链接,因为它们被标记为“未解析的外部符号”

可能的原因是什么?我如何解决

非常感谢,

极值编码器


好的,所以我已经设法把它全部编译好了。看来我所要做的就是把东西实现文件从.c扩展到.cpp(意思是编译为C++,而编译为C却不工作)。 这可能是什么原因造成的?我宁愿将所有内容都保留为.c而不是.cpp(因为这实际上是c代码


有指针吗?

有一个VS 2005项目,它使用CUDA将图像转换为灰度表示。不过,它使用了。如果您已经安装了,它应该非常简单

但是,即使您没有OpenCV并且不想编译应用程序,VS 2008也可以转换并打开此项目,您将能够看到如何将CUDA源代码与C/C++代码分开,以及如何正确配置项目属性

我还应该指出这条伟大的线索:


< P>主文件.Cu文件由NVCC处理,默认情况下,是一个C++编译器(实际上它是底层CUDA编译器和C.exe的包装器,默认的MS编译器)。结果是寻找具有C++绑定的函数,而编译为C时,则有C绑定。 如果希望将代码保留为C,则可以编辑stuff.h以将函数声明为extern“C”:

或者您可以将stuff.h包含在main.cu中:

// in main.cu
extern "C"
{
#include "stuff.h"
}

谢谢你的回复,它帮了我一点忙,但并没有达到我希望的效果。我实际上看了一些其他项目,搞砸了一点,似乎如果我所做的只是将stuff.c的扩展名改为stuff.cpp,一切都很好。是什么原因造成的?谢谢。很好!使用.cpp扩展名对你来说是个问题如果你需要帮助了解你的问题,我们需要你编辑你的问题,粘贴错误信息vs 2008给你。我帮你。我有它的方法。有没有办法做。Cu文件编译成C文件而不是C++文件?谢谢。你可以试试<代码>主机编译= c<代码>代码选项,但是看到这个帖子的CAVEA。ts:。一般来说,我更喜欢将我的
main
函数和其他所有内容保存在标准C/C++文件中,然后在CU文件中只包含内核和包装器。许多主要内容也需要放入CU文件中。。。
// in main.cu
extern "C"
{
#include "stuff.h"
}