【问题标题】:Trying to 'Make' CUDA SDK, ld cannot find library, ldconfig says it can试图“制作”CUDA SDK,ld 找不到库,ldconfig 说可以
【发布时间】:2010-04-26 19:37:07
【问题描述】:

我知道还有很多其他类似的问题,但是那里提出的解决方案都不适合我

基本上,制作 SDK 示例文件时,我会得到 /usr/bin/ld: cannot find -lcuda ,这很容易“找到库并将其扔给 ldconfig”,除了 ldconfig 已经说它有它...

$ sudo ldconfig -v | grep cuda
/usr/local/cuda/lib64:
    libcudartemu.so.3 -> libcudartemu.so.3.0.14
    libcudart.so.3 -> libcudart.so.3.0.14
/usr/local/cuda/lib:
    libcudartemu.so.3 -> libcudartemu.so.3.0.14
    libcudart.so.3 -> libcudart.so.3.0.14
    libcuda.so.1 -> libcuda.so.195.36.15
    libcuda.so.1 -> libcuda.so.195.36.15
    libicudata.so.42 -> libicudata.so.42.1

我查了一下,有一个符号链接 libcuda.so -> libcuda.so.1,但我仍然对为什么 libcuda.so -> ... 没有出现感到困惑

我一定遗漏了一些非常明显的东西。有什么想法吗?

【问题讨论】:

  • 通过谷歌找到了这个问题。由于 3 年后我现在遇到了类似的问题,我想我会记下我的解决方案:至少对于 CUDA 5.0 SDK 示例和我当前的驱动程序 (304.64),这个问题可以通过使用 make EXTRA_LDFLAGS="-L /usr/lib64/nvidia" (switch lib64 用于 32 位系统上的 lib)。链接器在 /usr/lib(64) 中查找,但驱动程序在 usr/lib(64)/nvidia 中安装了东西,但提供的 makefile 使用了EXTRA_LDFLAGS

标签: c++ compiler-construction makefile cuda linker-errors


【解决方案1】:

ldconfig 只处理运行时库,而ld 处理构建时库。根据您安装 CUDA 库的方式,您可能需要为构建时使用的符号链接安装一个附加包,或者您可能需要将 -L 选项传递给 gcc 或 ld 以便告诉它构建时符号链接的位置是。

【讨论】:

  • IANA 经验丰富的编码人员,所以我理解了您刚才所说的大约 70% 的内容:D 但是有没有地方可以添加这些路径而不是一直 _Ling 它们,类似于 $PATH envvar?我已经尝试将目录添加到 ld.so.conf.d 下的 conf 文件中,但没有解决任何问题。
  • 没有。而修改/etc/ld.so.conf.d只影响ld.so,只影响运行时。如果您想要某种半永久性的解决方案,那么您应该考虑为您的项目创建一个 makefile。
  • 这其实是CUDA SDK Makefiles的一个缺点。默认情况下,它们应该通过当前的 -L 选项。当前放置它的位置是C/common/common.mk:148。将此行更改为LINKFLAGS += -L/usr/lib/nvidia-current
【解决方案2】:

添加到 .bash_profile

export PATH=/usr/local/cuda/bin:$PATH
export LPATH=/usr/lib/nvidia-current:$LPATH
export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH

和来源 .bash_profile

【讨论】:

  • 作为临时修复,您也可以在构建 SDK 代码示例时执行 make LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH
  • 我赞成这个答案,但很快我发现这对我不起作用,我无法撤消赞成票。但是,我使用的是另一个库而不是 CUDA。
【解决方案3】:

尝试在编译器/链接器命令行上的 -lcuda 之前添加 -L/usr/local/cuda/lib。

【讨论】:

  • 仅供参考,由于 grepping,libcuda 实际上不在 /usr/local/cuda/lib 中,它在 /usr/lib/nvidia-current/libcuda
猜你喜欢
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2014-12-13
  • 2021-03-04
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多