I have successfully built G4.10.7.2 with vecgeom and the cuda backend however when I attempt to build an application I get the following errors
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::CudaManager()':
CudaManager.cpp:(.text+0x60b): undefined reference to `cudaDeviceSetLimit'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::AllocateNavIndexOnCoproc()':
CudaManager.cpp:(.text+0xc97): undefined reference to `vecgeom::cuda::InitDeviceNavIndexPtr(void*, int)'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::AllocatePlacedVolumesOnCoproc()':
CudaManager.cpp:(.text+0x193a): undefined reference to `vecgeom::cuda::InitDeviceCompactPlacedVolBufferPtr(void*)'
/usr/bin/ld: CudaManager.cpp:(.text+0x19a6): undefined reference to `vecgeom::cxx::DevicePtr<char>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1a69): undefined reference to `vecgeom::cuda::InitDeviceCompactPlacedVolBufferPtr(void*)'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::AllocateGeometry()':
CudaManager.cpp:(.text+0x1ab7): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::LogicalVolume>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1b30): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::LogicalVolume>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1bfd): undefined reference to `vecgeom::cxx::DevicePtr<char>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1c61): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::Transformation3D>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1cde): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::Transformation3D>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1ce6): undefined reference to `vecgeom::cxx::DevicePtr<char>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1d29): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::Vector<vecgeom::cuda::VPlacedVolume const*> >::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1d6c): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::VPlacedVolume const*>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1e02): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::Vector<vecgeom::cuda::VPlacedVolume const*> >::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x1e14): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::VPlacedVolume const*>::SizeOf()'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::Synchronize()':
CudaManager.cpp:(.text+0x2493): undefined reference to `vecgeom::cxx::DevicePtr<vecgeom::cuda::VPlacedVolume const*>::SizeOf()'
/usr/bin/ld: CudaManager.cpp:(.text+0x24e0): undefined reference to `void vecgeom::cxx::DevicePtr<vecgeom::cuda::Vector<vecgeom::cuda::VPlacedVolume const*> >::Construct<vecgeom::cxx::DevicePtr<vecgeom::cuda::VPlacedVolume const*>, unsigned long>(vecgeom::cxx::DevicePtr<vecgeom::cuda::VPlacedVolume const*>, unsigned long) const'
/usr/bin/ld: CudaManager.cpp:(.text+0x25f9): undefined reference to `cudaMemcpy'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::CudaManager::PrintGeometry() const':
CudaManager.cpp:(.text+0xc11): undefined reference to `vecgeom::cuda::CudaManagerPrintGeometry(vecgeom::cuda::VPlacedVolume const*)'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(CudaManager.cpp.o): in function `vecgeom::cxx::DevicePtrImpl<char, vecgeom::cxx::DevicePtr<char> >::Allocate(unsigned long)':
CudaManager.cpp:(.text._ZN7vecgeom3cxx13DevicePtrImplIcNS0_9DevicePtrIcEEE8AllocateEm[_ZN7vecgeom3cxx13DevicePtrImplIcNS0_9DevicePtrIcEEE8AllocateEm]+0xd): undefined reference to `vecgeom::cxx::DevicePtr<char>::SizeOf()'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaCheckError(cudaError)':
Interface.cpp:(.text+0x11): undefined reference to `cudaGetErrorString'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaCheckError()':
Interface.cpp:(.text+0x35): undefined reference to `cudaGetLastError'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaAssertError()':
Interface.cpp:(.text+0x65): undefined reference to `cudaGetLastError'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaMalloc(void**, unsigned int)':
Interface.cpp:(.text+0x83): undefined reference to `cudaMalloc'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaCopyToDevice(void*, void const*, unsigned int)':
Interface.cpp:(.text+0x98): undefined reference to `cudaMemcpy'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaCopyFromDevice(void*, void const*, unsigned int)':
Interface.cpp:(.text+0xa8): undefined reference to `cudaMemcpy'
/usr/bin/ld: /usr/local/lib/libvecgeom.a(Interface.cpp.o): in function `vecgeom::cxx::CudaFree(void*)':
Interface.cpp:(.text+0xb1): undefined reference to `cudaFree'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Collimator.dir/build.make:376: Collimator] Error 1
This seems like some sort of linker error though I don’t understand what the problem is.
Any help would be greatly appreciated.
Cheers