对于用gcc联CUDA静态或共享库未定义基准误差(undefined reference error

2019-08-07 12:55发布

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

Answer 1:

尝试使用克++代替GCC。 NVCC使用C ++风格链接约定。 (你并不需要重命名的文件。)

另外,如果你必须使用gcc,前言您void fcudadriver()函数的定义是这样的:

extern "C" void fcudadriver()


Answer 2:

C和C ++中的命名方式不同的功能。

由于NVCC对待.CU文件作为C ++的CPU代码,你可以重命名simplemain.csimplemain.cpp ,并与编译g++

另一种解决办法是将extern "C"在.CU文件中的函数定义之前。



文章来源: undefined reference error for linking CUDA static or shared library with gcc