温馨提示×

ubuntu gcc如何查依赖库

小樊
39
2026-10-04 01:54:13
栏目: 智能运维

在 Ubuntu 下,使用 gcc/g++ 编译程序时,常见的“查依赖库”需求一般有几种情况。下面按常见场景给你总结方法和命令。


一、查看可执行文件依赖了哪些动态库

1️⃣ 使用 ldd

ldd your_program

示例输出:

linux-vdso.so.1 (0x00007fff...)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6

✅ 适合:

  • 查看程序运行时需要的 .so 文件
  • 排查 “not found” 的依赖

2️⃣ 使用 objdump

objdump -p your_program | grep NEEDED

或:

objdump -x your_program | grep NEEDED

3️⃣ 使用 readelf

readelf -d your_program | grep NEEDED

二、查看编译时 gcc 实际链接了哪些库

1️⃣ 编译时加 -v(verbose)

gcc -v main.c -o main -lm

你能看到:

  • 实际调用的 collect2 / ld
  • 链接的 .a / .so 路径

2️⃣ 查看 gcc 默认搜索路径

gcc -print-search-dirs
gcc -print-file-name=libc.so

三、查找某个库在哪个包里(Ubuntu 特有)

1️⃣ 已知 .so 名,找包

dpkg -S libxxx.so.6

或:

apt-file search libxxx.so

(若没装 apt-file)

sudo apt install apt-file
sudo apt-file update

2️⃣ 已知函数/头文件,找开发包

apt-cache search libxxx-dev

例如:

sudo apt install libssl-dev

四、查看头文件 / 库文件路径

1️⃣ 头文件搜索路径

gcc -E -Wp,-v - < /dev/null

2️⃣ 库文件搜索路径

gcc -print-search-dirs

五、运行期找不到库怎么办

查看是否已加载

LD_DEBUG=libs ./your_program

临时指定库路径

export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH

永久生效(系统级)

sudo vim /etc/ld.so.conf.d/your.conf

写入:

/your/lib/path

然后:

sudo ldconfig

六、总结速查表

目的 命令
看运行依赖 ldd
看 NEEDED readelf -d
看链接过程 gcc -v
找库所属包 dpkg -S / apt-file
找 dev 包 apt-cache search libxxx-dev

如果你有具体报错信息(如 cannot find -lxxx 或 undefined reference),可以把内容贴出来,我可以帮你精准定位。

0 踩