在 CentOS 上“解决 C++ 报错”要先看报错发生在哪个阶段(编译期 / 链接期 / 运行期),下面按常见情况给你一套排查思路和解决方法。
g++ --version
如果没有:
sudo yum install gcc-c++
command not found: g++sudo yum install gcc-c++
fatal error: xxx.h: No such file or directory说明头文件缺失。
示例:
#include <boost/asio.hpp>
解决:
sudo yum install boost-devel
通用思路:
-devel 包报错类似:
error: ‘nullptr’ was not declared
解决:加标准参数
g++ main.cpp -std=c++11
# 或
g++ main.cpp -std=c++17
undefined reference to xxx说明函数声明了但没链接库
示例:
#include <pthread.h>
编译:
g++ main.cpp -lpthread
常见库:
| 库 | 参数 |
|---|---|
| pthread | -lpthread |
| math | -lm |
| boost | -lboost_system |
| ssl | -lssl -lcrypto |
cannot find -lxxx说明库没装或路径不对
查找库:
find / -name "libxxx.so" 2>/dev/null
指定路径:
g++ main.cpp -L/usr/local/lib -lxxx
error while loading shared libraries./a.out: error while loading shared libraries: libxxx.so.1
解决:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
或写进 /etc/ld.so.conf.d/
调试:
g++ main.cpp -g
gdb ./a.out
# 查看报错行号
g++ -Wall -Wextra main.cpp
# 查看依赖库
ldd a.out
# 查看符号
nm a.out | grep 函数名
你可以把具体报错内容贴出来,例如:
cat /etc/centos-release)我可以一步一步帮你定位并解决。