ссылка на общую библиотеку cuda: неопределенная ссылка на cudaRegisterLinkedBinary
Цель:
создайте разделяемую библиотеку, содержащую мои ядра CUDA, которая имеет оболочку / заголовок без CUDA.создатьtest
исполняемый файл для общей библиотеки.проблема
общая библиотекаMYLIB.so
похоже компилируется нормально. (нет проблем).Ошибка в связывании:./libMYLIB.so: undefined reference to __cudaRegisterLinkedBinary_39_tmpxft_000018cf_00000000_6_MYLIB_cpp1_ii_74c599a1
упрощенный make-файл:
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
в самом деле
nm libMYLIB.so
показывает, чтовсе CUDA API функции "неопределенные символы ":
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 как-то не связался с общей библиотекой MYLIB.so Чего мне не хватает?
CUDA даже не связывался с объектным файлом как-то:
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
(так же, как и выше)