在 Ubuntu 下用 C++ 编译时出现链接错误(link error),通常不是语法问题,而是编译和链接阶段没对上。下面按最常见原因 → 现象 → 解决办法给你梳理一下。
.cpp现象
undefined reference to `foo()'
原因 你有多个源文件,但只编译了一个。
错误示例
g++ main.cpp
正确做法
g++ main.cpp foo.cpp -o app
现象
undefined reference to `MyClass::func()'
原因
.h 里有声明.cpp 实现现象
undefined reference to `pthread_create'
undefined reference to `ssl_xxx'
原因
Ubuntu 很多库需要手动 -l
常见示例
# pthread
g++ main.cpp -lpthread
# ssl
g++ main.cpp -lssl -lcrypto
# boost
g++ main.cpp -lboost_system
现象
undefined reference to `xxxx'
规则(很重要)
被依赖的库写在后面
❌ 错误
g++ -lmylib main.cpp
✅ 正确
g++ main.cpp -lmylib
extern "C"现象
undefined reference to `my_c_func'
原因 C++ 会改名(name mangling)
解决
extern "C" {
#include "mylib.h"
}
现象
undefined reference to `MyTemplate<int>::func()'
原因
模板一般必须写在 .h 里
现象
file not recognized: file format not recognized
原因
你可以照着检查:
.cpp 都参与了编译-lxxxextern "C"你可以贴出:
我可以直接告诉你哪一行、为什么、怎么改。