尝试“制作”CUDA SDK时,ld找不到库,但ldconfig显示它可以找到。

12

我知道有许多类似于这个问题的其他问题,但那里提出的解决方案都对我不起作用。

基本上,当我制作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"(32位系统上将lib64替换为lib)来解决此问题。连接器正在查找 /usr/lib(64),但驱动程序安装在 usr/lib(64)/nvidia 中,而提供的 makefile 使用了 EXTRA_LDFLAGS - Sam
3个回答

8

添加到.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

执行命令 source .bash_profile


3
作为临时解决方法,您可以在构建SDK代码示例时执行make LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH - kynan
我点赞了这个答案,但很快发现它对我不起作用,而且我无法取消点赞。不过,我正在使用另一个库代替CUDA。 - duleshi

8

ldconfig 只处理运行时库,而 ld 处理编译时库。根据您安装 CUDA 库的方式,您可能需要安装一个额外的软件包来创建编译时的符号链接,或者您可能需要在 gcc 或 ld 中传递一个 -L 选项,以告诉它编译时符号链接的位置。


我是一名经验丰富的程序员,所以我大概理解了你刚才说的70% :D 但是有没有地方可以添加这些路径,而不是每次都手动输入呢?类似于$PATH环境变量的方式? 我已经尝试将这些目录添加到ld.so.conf.d下的配置文件中,但是没有解决问题。 - Bolster
不,修改/etc/ld.so.conf.d只会影响到ld.so,而ld.so只会影响到运行时。如果你想要某种半永久的解决方案,那么你应该考虑为你的项目创建一个makefile。 - Ignacio Vazquez-Abrams
2
这实际上是CUDA SDK Makefiles中的一个缺陷。它们应该默认传递当前的-L选项。将其放置的当前位置为C/common/common.mk:148。将此行更改为LINKFLAGS += -L/usr/lib/nvidia-current - kynan

1

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


因为进行了 grepping,所以 libcuda 实际上不在 /usr/local/cuda/lib 中,而是在 /usr/lib/nvidia-current/libcuda 中。 - Bolster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接