erreur de référence non définie pour la liaison de la bibliothèque statique ou partagée CUDA avec gcc

question gcc et cuda

Salut,

J’ai compilé une bibliothèque partagée CUDA mais je ne peux pas le lier au programme principal qui l’utilise. Je comstack le programme principal avec gcc.

Le code:

simplemain.c

#include  #include  void fcudadriver(); int main() { printf("Main \n"); fcudadriver(); return 0; } 

test.cu

  __global__ void fcuda() { } void fcudadriver() { fcuda<<>>(); } 

Je comstack test.cu en tant que -> ça marche

  nvcc --comstackr-options '-fPIC' -o libtest.so --shared test.cu 

Je comstack simplemain.c comme —> Il donne une erreur 🙁

  gcc simplemain.c -L. -ltest /tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver' collect2: ld returned 1 exit status 

essayez d’utiliser g ++ au lieu de gcc. nvcc utilise les conventions de liaison de style c ++. (Vous n’avez pas besoin de renommer de fichiers.)

Si vous devez utiliser gcc, vous pouvez également void fcudadriver() définition de la fonction void fcudadriver() comme void fcudadriver() :

 extern "C" void fcudadriver() 

C et C ++ nomment les fonctions de manière différente.

Puisque nvcc traite le code de la CPU dans le fichier .cu comme C ++, vous pouvez renommer simplemain.c en simplemain.cpp et le comstackr avec g++

Une autre solution consiste à append extern "C" avant la définition de la fonction dans le fichier .cu.