我被一个似乎很容易诊断和修复的问题难住了。我有一个使用 CUDA 驱动程序 API 的 C++ 源文件。当我使用 编译它时nvcc
,生成可执行文件并且可以正常工作。但是,当我尝试使用 编译它时g++
,链接器抱怨未定义对位于中的符号的引用/usr/lib/libcuda.so
:
undefined reference to cuDeviceGet'
... undefined reference to
cuDeviceComputeCapability'
... undefined reference to cuDeviceGetName'
... undefined reference to
cuDeviceTotalMem_v2'
... undefined reference to cuDeviceGetAttribute'
... undefined reference to
cuDeviceGetAttribute'
... undefined reference to cuDeviceGetAttribute'
... undefined reference to
cuDeviceGetAttribute'
我试图确保它/usr/lib
包含在库路径中(通过提供标志-L/usr/lib
、-lcuda
和添加/usr/lib
到$LIBRARY_PATH
)。但是,问题仍然存在。我确信其中/usr/lib/libcuda.so
包含链接器抱怨的符号:
$ nm -D /usr/lib/libcuda.so | grep cuDeviceGet
00000000000be410 T cuDeviceGet
00000000000bf120 T cuDeviceGetAttribute
00000000000d2e10 T cuDeviceGetByPCIBusId
00000000000be200 T cuDeviceGetCount
00000000000bdfa0 T cuDeviceGetName
00000000000d2bb0 T cuDeviceGetPCIBusId
00000000000bf380 T cuDeviceGetProperties
我觉得奇怪的是nvcc
成功编译了文件,但g++
没有。您对我如何解决此问题有任何想法吗?
非常感谢您的帮助!