gpt4 book ai didi

visual-studio - Visual Studio 与 Cuda 的链接问题

转载 作者:行者123 更新时间:2023-12-04 03:54:29 25 4
gpt4 key购买 nike

我正在使用 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 Computing SDK 中的 Cuda.rules,一切都编译得很好,但是......当将所有文件链接在一起时,它失败了。似乎在 stuff.h 中定义的所有函数(并在 stuff.c 中实现)都没有正确链接,因为它们被标记为“未解析的外部符号”。

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

非常感谢,

极限编码器

好的,所以我已经设法编译了所有内容。看来我所要做的就是将 stuff 实现文件的扩展名从 .c 更改为 .cpp (这意味着编译为 c++ 有效,而编译为 c 则不行!)。

这可能是什么原因造成的?我宁愿将所有内容都保留为 .c 而不是 .cpp (因为这实际上是 C 代码......

任何指针?

最佳答案

main.cu 文件由 nvcc 处理,默认情况下,它是一个 C++ 编译器(实际上它是底层 CUDA 编译器和 cl.exe(默认 MS 编译器)的包装器)。结果,它正在寻找具有 C++ 绑定(bind)的函数,而通过将它们编译为 C,您就有了 C 绑定(bind)。

如果您想将代码保留为 C,那么您可以编辑 stuff.h 以将函数声明为 extern "C":

/* in stuff.h */
if defined(__cplusplus)
extern "C"
{
#endif
/* ... your declarations ... */
if defined(__cplusplus)
}
#endif

或者您可以将 stuff.h 包含在 main.cu 中:
// in main.cu
extern "C"
{
#include "stuff.h"
}

关于visual-studio - Visual Studio 与 Cuda 的链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com