自己在Ubuntu 22.04上编译了程序,现场环境是20.04。
如何在不重新编译的情况下运行?
(程序设置了-rpath当前可执行文件目录)。
Ubuntu下如何查找所有依赖库。
-
- 帖子: 30
- 注册时间: 2011-12-08 22:46
- astolia
- 论坛版主
- 帖子: 6499
- 注册时间: 2008-09-18 13:11
Re: Ubuntu下如何查找所有依赖库。
查看依赖的动态链接库,不包含用dlopen动态加载的
代码: 全选
ldd 程序
-
- 帖子: 30
- 注册时间: 2011-12-08 22:46
Re: Ubuntu下如何查找所有依赖库。
版主大大你好,我将所有依赖库拷贝到当前可执行文件./lib路径后,ldd查看有些库任然到/lib/aarch64-linux-gnu下面去找是什么原因呢?
代码: 全选
ldd xxx
linux-vdso.so.1 (0x0000ffffa38a9000)
libzmq.so.5 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libzmq.so.5 (0x0000ffffa212a000)
libsqlite3.so.0 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libsqlite3.so.0 (0x0000ffffa1ff7000)
libmysqlcppconn8.so.2 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libmysqlcppconn8.so.2 (0x0000ffffa1c7b000)
libpthread.so.0 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libpthread.so.0 (0x0000ffffa1c4a000)
libstdc++.so.6 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libstdc++.so.6 (0x0000ffffa1a65000)
libm.so.6 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libm.so.6 (0x0000ffffa19ba000)
libgcc_s.so.1 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libgcc_s.so.1 (0x0000ffffa1996000)
libc.so.6 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libc.so.6 (0x0000ffffa1823000)
/lib/ld-linux-aarch64.so.1 (0x0000ffffa3879000)
libsodium.so.23 => /lib/aarch64-linux-gnu/libsodium.so.23 (0x0000ffffa17db000)
libpgm-5.2.so.0 => /lib/aarch64-linux-gnu/libpgm-5.2.so.0 (0x0000ffffa177e000)
libnorm.so.1 => /lib/aarch64-linux-gnu/libnorm.so.1 (0x0000ffffa161d000)
libgssapi_krb5.so.2 => /lib/aarch64-linux-gnu/libgssapi_krb5.so.2 (0x0000ffffa15c5000)
libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffffa15b1000)
libssl.so.1.1 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libssl.so.1.1 (0x0000ffffa1517000)
libcrypto.so.1.1 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libcrypto.so.1.1 (0x0000ffffa1288000)
libresolv.so.2 => /root/vs/PositionSever/out/install/Linux-GCC-Release/./lib/libresolv.so.2 (0x0000ffffa1262000)
libkrb5.so.3 => /lib/aarch64-linux-gnu/libkrb5.so.3 (0x0000ffffa117c000)
libk5crypto.so.3 => /lib/aarch64-linux-gnu/libk5crypto.so.3 (0x0000ffffa113f000)
libcom_err.so.2 => /lib/aarch64-linux-gnu/libcom_err.so.2 (0x0000ffffa112b000)
libkrb5support.so.0 => /lib/aarch64-linux-gnu/libkrb5support.so.0 (0x0000ffffa110e000)
libkeyutils.so.1 => /lib/aarch64-linux-gnu/libkeyutils.so.1 (0x0000ffffa10f9000)
root@dc171f7d1b86:~/vs/PositionSever/out/install/Linux-GCC-Release# ll ./lib | grep libkrb5.so.3
-rw-r--r-- 1 root root 876592 8月 11 17:30 libkrb5.so.3
-
- 帖子: 30
- 注册时间: 2011-12-08 22:46
Re: Ubuntu下如何查找所有依赖库。
代码: 全选
root@ccd67d575472:/home/root# ./xxx
./PositionSever: error while loading shared libraries: libsodium.so.23: cannot open shared object file: No such file or directory
root@ccd67d575472:/home/root# ldd xxx
linux-vdso.so.1 (0x0000ffff91236000)
libzmq.so.5 => /home/root/./lib/libzmq.so.5 (0x0000ffff8fab7000)
libsqlite3.so.0 => /home/root/./lib/libsqlite3.so.0 (0x0000ffff8f984000)
libmysqlcppconn8.so.2 => /home/root/./lib/libmysqlcppconn8.so.2 (0x0000ffff8f608000)
libpthread.so.0 => /home/root/./lib/libpthread.so.0 (0x0000ffff8f5d7000)
libstdc++.so.6 => /home/root/./lib/libstdc++.so.6 (0x0000ffff8f3f2000)
libm.so.6 => /home/root/./lib/libm.so.6 (0x0000ffff8f347000)
libgcc_s.so.1 => /home/root/./lib/libgcc_s.so.1 (0x0000ffff8f323000)
libc.so.6 => /home/root/./lib/libc.so.6 (0x0000ffff8f1b0000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff91206000)
libsodium.so.23 => not found
libpgm-5.2.so.0 => not found
libnorm.so.1 => not found
libgssapi_krb5.so.2 => not found
libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffff8f19c000)
libssl.so.1.1 => /home/root/./lib/libssl.so.1.1 (0x0000ffff8f102000)
libcrypto.so.1.1 => /home/root/./lib/libcrypto.so.1.1 (0x0000ffff8ee73000)
libresolv.so.2 => /home/root/./lib/libresolv.so.2 (0x0000ffff8ee4d000)
root@ccd67d575472:/home/root#
libsodium.so.23 => not found
libpgm-5.2.so.0 => not found
libnorm.so.1 => not found
libgssapi_krb5.so.2 => not found
但其实一直是有的,不知道为啥找不到。
代码: 全选
root@ccd67d575472:/home/root# ll ./lib | grep libsodium.so.23
-rw-r--r-- 1 root root 227504 Aug 11 09:30 libsodium.so.23
- astolia
- 论坛版主
- 帖子: 6499
- 注册时间: 2008-09-18 13:11
Re: Ubuntu下如何查找所有依赖库。
用飞翔的薄荷 写了: ↑2023-08-11 20:14
拷贝到新环境后,这几个文件果然找不到
libsodium.so.23 => not found
libpgm-5.2.so.0 => not found
libnorm.so.1 => not found
libgssapi_krb5.so.2 => not found
但其实一直是有的,不知道为啥找不到。代码: 全选
root@ccd67d575472:/home/root# ll ./lib | grep libsodium.so.23 -rw-r--r-- 1 root root 227504 Aug 11 09:30 libsodium.so.23
代码: 全选
LD_DEBUG=files,libs ldd xxxx
设置一下LD_LIBRARY_PATH环境变量为/home/root/lib,大不了用LD_PRELOAD来强行加载
-
- 帖子: 30
- 注册时间: 2011-12-08 22:46
Re: Ubuntu下如何查找所有依赖库。
用了LD_DEBUG看到,可执行文件依赖的库,去找了当前目录lib下。比如mysql库libmysqlcppconn8.so:
代码: 全选
18: file=libmysqlcppconn8.so.2 [0]; needed by ./PositionSever [0]
18: find library=libmysqlcppconn8.so.2 [0]; searching
18: search path=/home/root/.:/home/root/./lib (RUNPATH from file ./PositionSever)
18: trying file=/home/root/./libmysqlcppconn8.so.2
18: trying file=/home/root/./lib/libmysqlcppconn8.so.2
18:
18: file=libmysqlcppconn8.so.2 [0]; generating link map
18: dynamic: 0x0000ffff8eb85010 base: 0x0000ffff8e811000 size: 0x000000000037bc20
18: entry: 0x0000ffff8e88a620 phdr: 0x0000ffff8e811040 phnum: 8
18:
代码: 全选
18: file=libpgm-5.2.so.0 [0]; needed by /home/root/./lib/libzmq.so.5 [0]
18: find library=libpgm-5.2.so.0 [0]; searching
18: search cache=/etc/ld.so.cache
18: search path=/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu:/lib:/usr/lib (system search path)
18: trying file=/lib/aarch64-linux-gnu/libpgm-5.2.so.0
18: trying file=/usr/lib/aarch64-linux-gnu/libpgm-5.2.so.0
18: trying file=/lib/libpgm-5.2.so.0
18: trying file=/usr/lib/libpgm-5.2.so.0
目前的方案只能:export LD_LIBRARY_PATH=/home/root/./lib么?
- gulshan212
- 帖子: 8
- 注册时间: 2022-12-30 14:04
- 系统: Windows 10
- 来自: Haldwani, Uttarakhand (India)
- 联系:
find all dependent libraries in Ubuntu
Well, you can use 1dd command to find all dependent libraries in Ubuntu and you can do it by following way.
ldd /path/to/myprogram
Thanks
ldd /path/to/myprogram
Thanks