将CUDA静态或共享库与gcc链接的未定义引用错误

Bib*_*rak 6 c cuda shared-libraries undefined-reference nvcc

gcc和CUDA问题

嗨,

我编译了一个CUDA共享库,但无法将其与使用它的主程序链接.我用gcc编译主程序.

代码:

simplemain.c

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



    void fcudadriver();

    int main()
    {
      printf("Main \n");
      fcudadriver();
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

test.cu

    __global__ void fcuda()
    {
    }

    void fcudadriver()
    {
      fcuda<<<1,1>>>();
    }
Run Code Online (Sandbox Code Playgroud)

我编译test.cu为 - >它的工作原理

    nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu
Run Code Online (Sandbox Code Playgroud)

我编译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
Run Code Online (Sandbox Code Playgroud)

Rob*_*lla 3

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

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

extern "C" void fcudadriver()
Run Code Online (Sandbox Code Playgroud)