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)