8

gcc 和 CUDA 问题

你好,

我已经编译了一个 CUDA 共享库,但无法将它与使用它的主程序链接。我正在用 gcc 编译主程序。

编码:

简单的main.c

    #include <stdio.h>
    #include <stdlib.h>



    void fcudadriver();

    int main()
    {
      printf("Main \n");
      fcudadriver();
      return 0;
    }

测试.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
4

2 回答 2

2

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

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

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

于 2013-01-20T05:45:10.877 回答
2

尝试使用 g++ 而不是 gcc。nvcc 使用 c++ 风格的链接约定。(您不需要重命名任何文件。)

或者,如果您必须使用 gcc,请在void fcudadriver()函数定义前加上如下所示:

extern "C" void fcudadriver()
于 2013-01-20T05:51:06.387 回答