我被一个似乎很容易诊断和修复的问题难住了。我有一个使用 CUDA 驱动程序 API 的 C++ 源文件。当我使用 编译它时nvcc,生成可执行文件并且可以正常工作。但是,当我尝试使用 编译它时g++,链接器抱怨未定义对位于中的符号的引用/usr/lib/libcuda.so:
undefined reference to cuDeviceGet'
... undefined reference tocuDeviceComputeCapability'
... undefined reference to cuDeviceGetName'
... undefined reference tocuDeviceTotalMem_v2'
... undefined reference to cuDeviceGetAttribute'
... undefined reference tocuDeviceGetAttribute'
... undefined reference to cuDeviceGetAttribute'
... undefined reference tocuDeviceGetAttribute'
我试图确保它/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++没有。您对我如何解决此问题有任何想法吗?
非常感谢您的帮助!