在 CentOS 上查看 C++ 程序或库的依赖,常见有几种场景,下面按“最常用 → 进阶”给你说明。
ldd —— 查看运行时依赖ldd your_program
或
ldd libxxx.so
示例输出:
libstdc++.so.6 => /lib64/libstdc++.so.6
libm.so.6 => /lib64/libm.so.6
libc.so.6 => /lib64/libc.so.6
✅ 用于查看 运行时依赖的动态库
⚠️ 如果显示 not found,说明缺库
objdump(更底层)objdump -p your_program | grep NEEDED
或
objdump -p libxxx.so | grep NEEDED
strings /lib64/libstdc++.so.6 | grep GLIBCXX
示例:
GLIBCXX_3.4.21
GLIBCXX_3.4.25
✅ 用来判断 C++11 / C++14 / C++17 支持情况
g++ -v main.cpp -o main
或
make VERBOSE=1
nm -D your_program | grep ' U '
U 表示 未定义符号(需要外部库)
rpm -qf /lib64/libstdc++.so.6
yum provides libxxx.so.6
或(CentOS 8+)
dnf provides libxxx.so.6
readelfreadelf -d your_program
重点看:
NEEDEDRUNPATHRPATHfind . -name "CMakeLists.txt" | xargs grep -i "target_link_libraries"
| 依赖 | 说明 |
|---|---|
libstdc++.so.6 |
C++ 标准库 |
libgcc_s.so.1 |
GCC 运行时 |
libm.so.6 |
数学库 |
libc.so.6 |
C 标准库 |
libpthread.so.0 |
线程 |
error while loading shared libraries: libstdc++.so.6: cannot open shared object file
yum install libstdc++
如果你能告诉我:
我可以给你更精确的命令。