undefined reference error for linking CUDA static or shared library with gcc

こ雲淡風輕ζ 提交于 2019-12-04 22:28:22

问题


gcc and CUDA question

Hi,

I have compiled a CUDA shared library but can't link it with the main program that uses it. I am compiling the main program with gcc.

The code:

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>>>();
    }

I compile test.cu as --> It works

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

I compile simplemain.c as ---> It gives error :(

    gcc simplemain.c -L. -ltest
    /tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
    collect2: ld returned 1 exit status

回答1:


try using g++ instead of gcc. nvcc uses c++ style linking conventions. (You don't need to rename any files.)

alternatively, if you must use gcc, preface your void fcudadriver() function definition like this:

extern "C" void fcudadriver()



回答2:


C and C++ name the functions in different way.

Since nvcc treat the CPU code in .cu file as C++, you could rename your simplemain.c to simplemain.cpp, and compile it with g++

Another solution could be adding extern "C" before the function definition in the .cu file.



来源:https://stackoverflow.com/questions/14421898/undefined-reference-error-for-linking-cuda-static-or-shared-library-with-gcc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!