您好,
我编译了一个CUDA共享库,但无法将其与使用它的主程序链接。我正在用gcc编译主程序。
代码:
simplemain.c
#include <stdio.h>
#include <stdlib.h>
void fcudadriver();
int main()
{
printf("Main \n");
fcudadriver();
return 0;
}
test.cu
__global__ void fcuda()
{
}
void fcudadriver()
{
fcuda<<<1,1>>>();
}
我将test.cu编译为 - &gt;它的工作原理
nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu
我将simplemain.c编译为---&gt;它给出了错误:(
gcc simplemain.c -L. -ltest
/tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
collect2: ld returned 1 exit status
答案 0 :(得分:2)
C和C ++以不同的方式命名函数。
由于nvcc将.cu文件中的CPU代码视为C ++,您可以将simplemain.c
重命名为simplemain.cpp
,并使用g++
另一种解决方案可能是在.cu文件中的函数定义之前添加extern "C"
。
答案 1 :(得分:2)
尝试使用g ++而不是gcc。 nvcc使用c ++样式链接约定。 (您无需重命名任何文件。)
或者,如果您必须使用gcc,请在void fcudadriver()
函数定义前加上:
extern "C" void fcudadriver()