2

我被一个似乎很容易诊断和修复的问题难住了。我有一个使用 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++没有。您对我如何解决此问题有任何想法吗?

非常感谢您的帮助!

4

1 回答 1

2

好的,我无法编译文件的原因是-lcuda标志必须文件名之后。否则,它将无法正常工作......编译器会发出一个大而突出的警告,告诉我这些信息将不胜感激。嗯,浪费了两个小时。

于 2012-05-01T18:59:31.840 回答