cuda shared library linking: undefinierter Verweis auf cudaRegisterLinkedBinary

Tor:

Erstellen Sie eine gemeinsam genutzte Bibliothek mit meinen CUDA-Kerneln, die über einen CUDA-freien Wrapper / Header verfügt.ein ... kreierentest ausführbar für die gemeinsam genutzte Bibliothek.

Problem

gemeinsame BibliothekMYLIB.so scheint gut zu kompilieren. (kein Problem).Fehler beim Verknüpfen:

./libMYLIB.so: undefined reference to __cudaRegisterLinkedBinary_39_tmpxft_000018cf_00000000_6_MYLIB_cpp1_ii_74c599a1

vereinfachtes makefile:

libMYlib.so :  MYLIB.o
    g++  -shared  -Wl,-soname,libMYLIB.so  -o libMYLIB.so    MYLIB.o  -L/the/cuda/lib/dir  -lcudart


MYLIB.o : MYLIB.cu   MYLIB.h
    nvcc  -m64   -arch=sm_20 -dc  -Xcompiler '-fPIC'  MYLIB.cu  -o  MYLIB.o  -L/the/cuda/lib/dir  -lcudart


test : test.cpp  libMYlib.so
        g++   test.cpp  -o test  -L.  -ldl -Wl,-rpath,.   -lMYLIB  -L/the/cuda/lib/dir  -lcudart

tatsächlich

nm libMYLIB.so zeigt, dassalles CUDA-API-Funktionen sind "undefinierte Symbole":

         U __cudaRegisterFunction
         U __cudaRegisterLinkedBinary_39_tmpxft_0000598c_00000000_6_CUPA_cpp1_ii_74c599a1
         U cudaEventRecord
         U cudaFree
         U cudaGetDevice
         U cudaGetDeviceProperties
         U cudaGetErrorString
         U cudaLaunch
         U cudaMalloc
         U cudaMemcpy

CUDA wurde also irgendwie nicht mit der gemeinsam genutzten Bibliothek MYLIB.so verknüpft. Was fehle ich?

CUDA wurde nicht einmal irgendwie mit der Objektdatei verknüpft:

nm MYLIB.o

         U __cudaRegisterFunction
         U __cudaRegisterLinkedBinary_39_tmpxft_0000598c_00000000_6_CUPA_cpp1_ii_74c599a1
         U cudaEventRecord
         U cudaFree
         U cudaGetDevice
         U cudaGetDeviceProperties
         U cudaGetErrorString
         U cudaLaunch
         U cudaMalloc
         U cudaMemcpy

(das gleiche wie oben)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage