ld忽略LD_LIBRARY_PATH

问题描述 投票:0回答:1

问题

我在ld: cannot find -lcudnn上挣扎。

说明

我想在我的项目中使用Cuda和CuDnn。我在集群中工作,Cuda已安装在集群中(请问我没有root权限)。因此,我将Cuda文件复制到本地文件夹中,并按照官方网站上的说明安装Cudnn。但是,ld找不到libcudnn.so

$ lsb_release -a
Description:    Red Hat Enterprise Linux Server release 7.7 (Maipo)
Release:        7.7

我尝试过的

$ ld -lcudnn --verbose
attempt to open //usr/x86_64-redhat-linux/lib64/libcudnn.so failed
attempt to open //usr/x86_64-redhat-linux/lib64/libcudnn.a failed
attempt to open //usr/lib64/libcudnn.so failed
attempt to open //usr/lib64/libcudnn.a failed
attempt to open //usr/local/lib64/libcudnn.so failed
attempt to open //usr/local/lib64/libcudnn.a failed
attempt to open //lib64/libcudnn.so failed
attempt to open //lib64/libcudnn.a failed
attempt to open //usr/x86_64-redhat-linux/lib/libcudnn.so failed
attempt to open //usr/x86_64-redhat-linux/lib/libcudnn.a failed
attempt to open //usr/local/lib/libcudnn.so failed
attempt to open //usr/local/lib/libcudnn.a failed
attempt to open //lib/libcudnn.so failed
attempt to open //lib/libcudnn.a failed
attempt to open //usr/lib/libcudnn.so failed
attempt to open //usr/lib/libcudnn.a failed
ld: cannot find -lcudnn

如果我手动添加libcudnn.so的库路径

$ ld -L "$CUDA_HOME/lib64" -lcudnn
attempt to open /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so succeeded
-lcudnn (/home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so)
librt.so.1 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found librt.so.1 at /usr/lib64/librt.so.1
libpthread.so.0 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libpthread.so.0 at /usr/lib64/libpthread.so.0
libdl.so.2 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libdl.so.2 at /usr/lib64/libdl.so.2
libstdc++.so.6 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libstdc++.so.6 at /usr/lib64/libstdc++.so.6
libm.so.6 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libm.so.6 at /usr/lib64/libm.so.6
libgcc_s.so.1 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libgcc_s.so.1 at /usr/lib64/libgcc_s.so.1
libc.so.6 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found libc.so.6 at /usr/lib64/libc.so.6
ld-linux-x86-64.so.2 needed by /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so
found ld-linux-x86-64.so.2 at /usr/lib64/ld-linux-x86-64.so.2
ld: warning: cannot find entry symbol _start; not setting start address

这里是我的LD_LIBRARY_PATH

$ echo $LD_LIBRARY_PATH
/home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64

ld以某种方式忽略了LD_LIBRARY_PATH。由于我没有root权限,因此无法创建符号链接或在ldconfig中进行更改。因此,设置LD_LIBRARY_PATH是我可以解决的唯一方法。

感谢您的帮助。

linux linker gnu ld
1个回答
0
投票

((本来可能是评论,但我对此没有足够的声誉;我只在谈论一般的链接器等用法,我不知道cuda或cudnn项目及其使用的构建工具等)。 )

如果我手动添加libcudnn.so的库路径

$ ld -L "$CUDA_HOME/lib64" -lcudnn

这是一个链接行,没有目标文件可用来链接和创建可执行文件。

attempt to open /home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so succeeded
-lcudnn (/home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64/libcudnn.so)
 :

这显示您进入-L的正确路径。

ld: warning: cannot find entry symbol _start; not setting start address

一旦您使用适当的链接线,可能会解决此问题,也许是通过将您在上面正确指定的-L路径合并到构建过程中,例如Makefile或其他合适的方法。

这是我的LD_LIBRARY_PATH

$ echo $LD_LIBRARY_PATH
/home/ul/ul_student/ul_dco32/pkg/cuda/10.2/lib64

ld以某种方式忽略了LD_LIBRARY_PATH。由于我没有根权限,我无法创建符号链接或在其中进行更改ldconfig。因此,设置LD_LIBRARY_PATH是我可以解决的唯一方法。

[LD_LIBRARY_PATH在链接时不供ld使用,它是用来告诉ld.so运行时链接程序(动态加载程序)在搜索要加载到正在运行的程序中的共享库时在哪里寻找。

© www.soinside.com 2019 - 2024. All rights reserved.