为什么有些linux的应用程序 ldd出来的库是可变路径
时间: 2024-03-28 10:39:59 浏览: 25
有些 Linux 应用程序会在编译时使用动态链接库,这些动态链接库在运行时需要被加载。ldd 命令可以用来查看一个应用程序所依赖的动态链接库。当 ldd 显示的库路径为可变路径时,这通常是因为应用程序使用了相对路径来引用这些库。这种情况下,应用程序会在运行时根据当前工作目录来寻找这些库,因此库路径会有所变化。另外,也可能是应用程序使用了 LD_LIBRARY_PATH 环境变量来指定库的搜索路径,导致库路径发生变化。
相关问题
linux环境 如何看运行程序的搜索动态链接库的路径列表
在 Linux 环境中,我们可以使用以下命令来查看运行程序的搜索动态链接库的路径列表:
```
ldd <程序名>
```
该命令会列出程序所依赖的动态链接库及其路径列表。例如,如果要查看 /usr/bin/vim 的搜索动态链接库的路径列表,可以使用以下命令:
```
ldd /usr/bin/vim
```
输出结果可能会类似于:
```
linux-vdso.so.1 => (0x00007fff293fe000)
libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007f3eda67e000)
libgdk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0 (0x00007f3eda3a5000)
libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f3eda0b8000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007f3ed9e9a000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f3ed9c49000)
libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007f3ed9a26000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3ed965d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3ed943f000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f3ed91ec000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f3ed8ed2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3ed8bca000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3ed89c5000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f3ed87a4000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f3ed846f000)
libXt.so.6 => /usr/lib/x86_64-linux-gnu/libXt.so.6 (0x00007f3ed821c000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f3ed7fd9000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f3ed7d2c000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f3ed7b11000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3eda9ea000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f3ed78e8000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f3ed76e4000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f3ed74de000)
```
在该输出结果中,每个动态链接库的路径都显示在箭头后面。例如,第一行中的 `linux-vdso.so.1` 表示使用 Linux 内核提供的 vdso 动态链接库,不需要从文件系统中加载;而第二行中的 `libgtk-x11-2.0.so.0` 则表示需要从 `/usr/lib/x86_64-linux-gnu/` 目录下加载 `libgtk-x11-2.0.so.0` 动态链接库。
ldd 运行链接库路径不对
如果在运行程序时,系统提示 "ldd 运行链接库路径不对",可能是因为系统无法找到程序所需要的动态链接库。可以尝试以下几种方法解决:
1. 设置 LD_LIBRARY_PATH 环境变量,将动态链接库的路径添加进去。例如,如果动态链接库在 /usr/local/lib 目录下,可以执行以下命令:
export LD_LIBRARY_PATH=/usr/local/lib
2. 将动态链接库复制到系统默认的路径下,例如 /usr/lib 或 /lib 目录下。
3. 在程序中使用 rpath 选项指定动态链接库的路径。例如,在编译程序时可以使用以下命令:
gcc -o myprogram myprogram.c -L/usr/local/lib -Wl,-rpath=/usr/local/lib -lmylib
其中 -L 指定动态链接库所在的路径,-Wl,-rpath 指定运行时搜索动态链接库的路径,-l 指定需要链接的动态链接库。
希望这些方法能够解决你的问题。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![sh](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)