Как создать библиотеку .so с кодом CUDA?

Пытаюсь создать динамическую библиотеку so с кодом CUDA для Linux. Пытаюсь скомпилировать:

nvcc CudaLib.cu -shared -o CudaLib.so -arch=native

Получаю ошибку:

перемещение R_X86_64_32S для «.rodata» не может использоваться при создании общий объект; перекомпилируйте с параметром -fPIC

Понятно, что для компиляции нужен параметр -fPIC, но в nvcc он не поддерживается. Если написать

nvcc CudaLib.cu -shared -fPIC -o CudaLib.so -arch=native

то будет ошибка:

Unknown option '-fPIC'


Ответы (1 шт):

Автор решения: alvahtin

Нашёл ответ. Для того, чтобы добавить флаг -fPIC нужно использовать -Xcompiler=-fPIC.

Таким образом, строка компиляции будет

nvcc CudaLib.cu -shared -Xcompiler=-fPIC -o CudaLib.so -arch=native
→ Ссылка