在 Linux 下进行 C++ 开发和环境配置时,和 Windows 有不少差异,下面从编译器、构建系统、依赖管理、调试、兼容性和常见坑几个方面总结需要注意的点。
Linux 下主流编译器:
g++安装示例(Ubuntu):
sudo apt install g++ clang
查看版本:
g++ --version
⚠ 注意:
不要依赖默认标准:
g++ -std=c++17 main.cpp
CMake 中:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
CMake 最小示例:
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
add_executable(demo main.cpp)
构建:
mkdir build && cd build
cmake ..
make
❌ 错误:
include_directories(/usr/local/include)
✅ 正确:
find_package(OpenCV REQUIRED)
target_link_libraries(app ${OpenCV_LIBS})
aptyum / dnfpacman示例:
sudo apt install libboost-dev
.so:动态库(默认).a:静态库查看依赖:
ldd ./app
运行时找不到 .so:
export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH
编译时:
-Iinclude -Llib -lmylib
g++ -g main.cpp
gdb ./a.out
常用:
break main
run
next
print x
g++ -fsanitize=address -g main.cpp
可检测:
perfvalgrindgprofLinux 文件系统严格区分大小写:
#include "MyHeader.h" // ❌ 实际是 myheader.h
/\pthread 需要显式链接:-lpthread
CMake:
find_package(Threads REQUIRED)
target_link_libraries(app Threads::Threads)
| 问题 | 说明 |
|---|---|
| 编译通过运行崩 | 多半是库版本 / ABI 问题 |
| 找不到头文件 | -I 没加 |
| 找不到符号 | 链接顺序错误 |
| 升级 GCC 后异常 | ABI 不兼容 |
| 静态变量行为不同 | 多线程未加锁 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置模板。