cuda文件并没有链接到C文件中定义的函数
cuda file did not link with function defined in C file
我有一个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: %sn", 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: %sn", s);
assert(0);
snprintf(buffer, 256, "CUDA Error Prev: %s", s);
error(buffer);
}
}
我使用Visual studio 2015进行编译。cuda.c被编译为一个c文件。
没有编译错误。但我得到以下链接错误:
test.cu.obj:error LNK2001:未解析的外部符号"void __cdecl check_error(enum-cudaError)"(?check_error@@YAXW4cudaError@@@Z)
如何解决此错误?
这不是CUDA和C++中名称篡改的重复,因为它询问的是相反的顺序。从Cuda代码中调用C函数。在上面的问题中,它用于从C文件中调用cuda函数。
编译C时没有名称篡改。
编译C++时,需要使用extern "C"
:关闭声明的名称篡改
#ifdef __cplusplus
extern "C" {
#endif
extern void check_error(cudaError_t status);
#ifdef __cplusplus
}
#endif
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- C++编程从外部文本文件定义数组大小
- MAKE:找不到包含的用户定义的头文件?
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 即使我没有包含多个文件,C++中的多个定义错误
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 将文件复制到自定义位置,存在字符串转换问题
- 如何正确定义C++类析构函数并将其链接到主文件?
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- 从头文件定义嵌套类
- 使用标头文件定义MT19937和normal_distribution
- 为特定文件定义
- 从.h和.cpp文件定义纯虚拟函数会产生链接器错误吗
- C 编程从外部输入文件定义数组大小
- 编译头文件定义了一个模板类,该类还包括其他头文件