【发布时间】:2012-05-01 18:23:13
【问题描述】:
我被一个似乎很容易诊断和修复的问题难住了。我有一个使用 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++ 没有。您对我如何解决此问题有任何想法吗?
非常感谢您的帮助!
【问题讨论】:
-
确保您还拥有
-lcuda编译器标志以实际包含该库,并且您尝试链接的 libcuda.so 用于同一平台(32/64 位)。在 64 位版本上通常有一个 /usr/lib64 -
我也包括了这个标志——我应该提到这一点,但我相应地更新了问题。
-
作为一个新的 CUDA 用户我不明白的东西......这与 CUDA 工具包附带的 cuda 运行时(cudart)库不同。
标签: gcc linker cuda g++ shared-libraries