使用gcc链接CUDA静态或共享库时出现未定义的引用错误

9

gcc和CUDA问题

你好,

我已经编译了一个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 为 --> 它可用

    nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu

我编译simplemain.c文件,结果出错了 :(
    gcc simplemain.c -L. -ltest
    /tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
    collect2: ld returned 1 exit status

1
+1 包括一个完整可编译的简单示例。 - Robert Crovella
Bibrak:如果@RobertCrovella的答案回答了你的问题,请将其标记为已接受。 - Roger Dahl
2个回答

3

C和C++以不同的方式命名函数。

由于nvcc将.cu文件中的CPU代码视为C ++,因此您可以将simplemain.c重命名为simplemain.cpp,并使用g ++编译它。

另一种解决方案是在.cu文件中的函数定义之前添加extern "C"


3

尝试使用g++而不是gcc。 nvcc使用C ++样式的链接约定。(您无需重命名任何文件。)

或者,如果必须使用gcc,请在void fcudadriver()函数定义之前添加以下内容:

extern "C" void fcudadriver()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接