“Linux 下 C++ 崩库”一般指程序在调用某个库(动态库 .so 或静态库)时崩溃,常见原因可以分成几类。下面按最常见 → 较少见给你梳理,并给出排查思路。
这是 Linux 上“崩库”的头号原因。
✅ 表现:
SIGSEGVstd::string、std::vector 内部✅ 排查:
ldd your_program
strings libxxx.so | grep GLIBCXX
✅ 解决:
Linux 运行时找的是 运行时路径,不是编译时路径。
.soLD_LIBRARY_PATH 指错了.so 还在✅ 崩溃点:
undefined symbol✅ 排查:
ldd your_program
nm -D libxxx.so | grep func_name
库本身有 bug,或你传了非法参数。
常见错误:
✅ 崩溃特征:
free / mallocdouble freecorrupted double-linked list✅ 排查:
valgrind ./your_program
或
gdb ./your_program
run
bt
在库里抛异常,在主程序里捕获(或反过来)
✅ 表现:
terminate called after throwing an instance of ...SIGABRT✅ 解决:
.so 抛 C++ 异常.o 被链接两次✅ 表现:
__cxa_finalize)init() 就被用你可以一条条对照:
ldd 指向的 .so 是否正确valgrind 是否报越界std:: 里你可以贴:
bt 输出)ldd 结果我可以直接帮你定位是 ABI 问题 / 内存问题 / 链接问题。