我很难被看似容易诊断和修复的问题所困扰。我有一个使用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'
我尝试确保cuDeviceGet'
... undefined reference to
包含在库路径中(通过提供标记cuDeviceGetName'
... undefined reference to
,cuDeviceGetAttribute'
... undefined reference to
,并将cuDeviceGetAttribute'
... undefined reference to
添加到/usr/lib
) 。但是,问题仍然存在。我确信-L/usr/lib
包含链接器抱怨的符号:
-lcuda
我发现/usr/lib
成功编译文件很奇怪,但$LIBRARY_PATH
却没有。你对我如何解决这个问题有任何想法吗?
非常感谢你的帮助!
答案 0 :(得分:2)
好的,我无法编译文件的原因是因为-lcuda
标志必须在文件名之后。否则,它将无法工作......编辑告诉我这些信息会受到很多赞赏,这是一个大而突出的警告。好吧,这浪费了两个小时。