在 Linux 下写 C++,相比 Windows 有一些特有的坑和习惯差异。下面按“新手最容易踩”到“进阶注意”梳理一下,都是实战经验。
g++ --version
✅ 建议:明确指定标准
g++ -std=c++17 main.cpp
Linux 不会自动链接
#include <pthread.h>
g++ main.cpp -lpthread
常见:
-lpthread-ldl-lmLinux 严格区分大小写
#include "Log.h" // 实际文件是 log.h → 编译失败
/\"/home/user/data.txt"
./a.out
✅ 获取 exe 路径:
readlink("/proc/self/exe", buf, size);
Linux 下:
✅ 调试神器:
gdb ./a.out
valgrind ./a.out
Linux 默认栈大小有限(通常 8MB)
int a[10000000]; // 可能炸
✅ 用堆:
vector<int> a(1e7);
std::thread 底层是 pthreadstd::thread t(f);
t.detach(); // 或 join()
SIGSEGV, SIGINT❌ 错误:
void handler(int) {
cout << "error"; // 不安全
}
ulimit -n
默认可能只有 1024
✅ 高并发程序要调大
sleep 单位:秒usleep:微秒(已废弃)nanosleep:推荐this_thread::sleep_for(100ms);
./app: error while loading shared libraries
✅ 解决:
export LD_LIBRARY_PATH=.
或
ldconfig
✅ 字符串处理尽量用 std::string + UTF-8
✅ 推荐工具:
g++ / clang++CMakegdbvalgrindclang-tidy✅ 写 Linux C++:
Linux 写 C++:编译严格、运行直接、错误隐蔽、调试靠工具
如果你愿意,可以告诉我:
我可以给你更针对性的“避坑清单”。