CUDA 6.0 Linking error: undefined reference to `__cudaUnregisterFatBinary'

c++, cuda, eclipse, nvcc

Solution

you need to link to `cudart`, cuda runtime, as well. Add `-lcudart`

Problem

I am trying to compile a simple CUDA program in Eclipse. ``` g++ -L/opt/cuda/lib64 -o "cuda_esn" ./cu_cuda_test.o ./main.o -lcuda -lstdc++ ``` As you can see I am linking `-lcuda` and set the library path `-L/opt/cuda/lib64`. But unfortunately I have no idea why this is not compiling. Complete output: ``` 18:36:35 **** Incremental Build of configuration Default for project cuda_esn **** make all Building file: ../cuda_test.cu Invoking: CUDA NVCC Compiler nvcc -c -o "cu_cuda_test.o" "../cuda_test.cu" && \ echo -n 'cu_cuda_test.d' ./ > 'cu_cuda_test.d' && \ nvcc -M "../cuda_test.cu" >> 'cu_cuda_test.d' nvcc warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. nvcc warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. Finished building: ../cuda_test.cu Building target: cuda_esn Invoking: C++ Linker g++ -L/opt/cuda/lib64 -o "cuda_esn" ./cu_cuda_test.o ./main.o -lcuda -lstdc++ ./cu_cuda_test.o: In function `__cudaUnregisterBinaryUtil()': makefile:32: recipe for target 'cuda_esn' failed tmpxft_00001041_00000000-3_cuda_test.cudafe1.cpp:(.text+0x49): undefined reference to `__cudaUnregisterFatBinary' ./cu_cuda_test.o: In function `__nv_init_managed_rt_with_module(void**)': tmpxft_00001041_00000000-3_cuda_test.cudafe1.cpp:(.text+0x63): undefined reference to `__cudaInitModule' ./cu_cuda_test.o: In function `__sti____cudaRegisterAll_44_tmpxft_00001041_00000000_6_cuda_test_cpp1_ii_aeee46d9()': tmpxft_00001041_00000000-3_cuda_test.cudafe1.cpp:(.text+0x9c): undefined reference to `__cudaRegisterFatBinary' collect2: error: ld returned 1 exit status make: *** [cuda_esn] Error 1 ``` This would be the source code (not really exciting yet): cuda_test.h ``` #ifndef CUDARR #define CUDARR #ifdef __cplusplus extern "C" #endif void foo_wrapper(); #endif ``` cuda_test.cu ``` #include "cuda_test.h" #include "cuda.h" #include "cuda_runtime.h" extern "C" void foo_wrapper() { } ``` Main.cpp ``` #include <iostream> #include "cuda_test.h" int main() { std::cout << "hello world" << std::endl; foo_wrapper(); return 0; } ``` Can anybody help me?

Original source