Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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
like image 897
Bibrak Avatar asked Jan 20 '13 05:01

Bibrak


1 Answers

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()
like image 115
Robert Crovella Avatar answered Oct 18 '22 18:10

Robert Crovella