【发布时间】:2016-09-24 13:16:24
【问题描述】:
我有一个 cuda 文件 test.cu,其中包含一个文件 cuda.h。
cuda.h 包含 test.cu 中使用的以下函数定义。
extern void check_error(cudaError_t status);
这个函数在 cuda.c 中定义如下:
void check_error(cudaError_t status)
{
cudaError_t status2 = cudaGetLastError();
if (status != cudaSuccess)
{
const char *s = cudaGetErrorString(status);
char buffer[256];
printf("CUDA Error: %s\n", s);
assert(0);
snprintf(buffer, 256, "CUDA Error: %s", s);
error(buffer);
}
if (status2 != cudaSuccess)
{
const char *s = cudaGetErrorString(status);
char buffer[256];
printf("CUDA Error Prev: %s\n", s);
assert(0);
snprintf(buffer, 256, "CUDA Error Prev: %s", s);
error(buffer);
}
}
我使用 Visual Studio 2015 进行编译。 cuda.c 被编译为 C 文件。
没有编译错误。但我收到以下链接错误:
test.cu.obj : error LNK2001: unresolved external symbol "void __cdecl check_error(enum cudaError)" (?check_error@@YAXW4cudaError@@@Z)
如何解决这个错误?
这不是Name mangling in CUDA and C++ 的重复,因为它询问相反的顺序。从 Cuda 代码调用 C 函数。在上述问题中,它用于从 C 文件中调用 cuda 函数。
【问题讨论】:
-
@KlasLindbäck:你投票赞成关闭吗?
-
您是否尝试将扩展名更改为
.cpp? CUDA 源代码经过 nvcc AND cc(VS 编译器),可以是 C 或 C++。 -
@DavidLively:现在由答案解决了。
-
@ProEns08 是的,我做到了。这些问题看起来很相似,足以被骗。你不同意吗?
标签: c++ c visual-studio cuda linker