Erreur de liaison CUDA dans Ubuntu 12.04

J’ai cherché partout une solution à mon problème: je ne peux pas exécuter un fichier .cpp en utilisant CUDA. Je pense que c’est une erreur de module car j’ai l’erreur suivante:

g++ -L/usr/local/cuda/lib64 -L~/NVIDIA_GPU_Computing_SDK/shared/lib/linux -L~/NVIDIA_GPU_Computing_SDK/C/common/lib/linux -L~/NVIDIA_GPU_Computing_SDK/C/lib -lcutil -lcudpp -lcuda -lcudart -lcurand -o my_file my_file.o /usr/bin/ld: cannot find -lcutil /usr/bin/ld: cannot find -lcudpp 

Mon makefile ressemble à ceci:

 EXECUTABLE := my_file SDKPATH := ~/NVIDIA_GPU_Computing_SDK CUDAPATH := /usr/local/cuda LDFLAGS := -L$(CUDAPATH)/lib64 -L$(SDKPATH)/shared/lib/linux -L$(SDKPATH)/C/common/lib/linux -L$(SDKPATH)/C/lib -lcutil -lcudpp -lcuda -lcudart -lcurand CXFLAGS := -I$(CUDAPATH)/include -I$(SDKPATH)/shared/inc -I$(SDKPATH)/C/common/inc CXX := g++ NVCC := $(CUDAPATH)/bin/nvcc $(EXECUTABLE): my_file.o $(CXX) $(LDFLAGS) -o $(EXECUTABLE) my_file.o my_file.o: my_file.cu $(NVCC) $(CXFLAGS) -c my_file.cu 

Au lieu d’essayer d’exécuter manuellement le fichier, j’obtiens la sortie suivante:

 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' my_file.o: In function `__cudaUnregisterBinaryUtil()': tmpxft_00000e8f_00000000-1_my_file.cudafe1.cpp:(.text+0xf): undefined reference to `__cudaUnregisterFatBinary' my_file.o: In function `__sti____cudaRegisterAll_59_tmpxft_00000e8f_00000000_4_my_file_cpp1_ii_71dc03a4()': tmpxft_00000e8f_00000000-1_my_file.cudafe1.cpp:(.text+0x1f): undefined reference to `__cudaRegisterFatBinary' collect2: ld returned 1 exit status 

Je suis un noob total quand il s’agit de Linux. Quelqu’un peut-il s’il vous plaît faire la lumière sur cette situation.

Cordialement

Vous avez un problème de classement dans la phase de liaison de votre build. Les bibliothèques que vous spécifiez étant fournies avant les fichiers qui les nécessitent, elles sont supprimées. Si vous changez votre makefile en quelque chose comme:

 LDFLAGS := -L$(CUDAPATH)/lib64 -L$(SDKPATH)/shared/lib/linux -L$(SDKPATH)/C/common/lib/linux LIBS := -lcutil -lcudpp -lcuda -lcudart -lcurand .... $(EXECUTABLE): my_file.o $(CXX) $(LDFLAGS) -o $(EXECUTABLE) my_file.o $(LIBS) 

vous devriez trouver le problème disparaît.