在 Ubuntu 上用 gcc 编译时“链接失败”(link error)是很常见的问题,原因通常集中在找不到库、找不到符号、参数顺序不对这几类。下面按最常见原因给你梳理一下,并给出排查办法。
典型报错:
undefined reference to `xxx'
常见原因:
-lxxx✅ 解决:
gcc main.c -o app -lm # 数学库
gcc main.c -o app -lpthread # 线程库
如果库不在默认路径:
gcc main.c -o app -L/usr/local/lib -lmylib
gcc 对顺序非常敏感
❌ 错误:
gcc -lm main.c
✅ 正确:
gcc main.c -lm
规则:
源文件 / 目标文件 在前,库在后
例如用 pthread 或 ssl 报错。
✅ 检查是否安装 dev 包:
sudo apt install libssl-dev
sudo apt install libpthread-stubs0-dev
Ubuntu 中:
libxxx.so → 运行时libxxx-dev → 编译用(头文件 + 链接用)报错类似:
Skipping incompatible xxx when searching for -lxxx
✅ 查看架构:
file a.out
gcc -dumpmachine
✅ 安装对应库:
sudo apt install gcc-multilib
如果你混用了 C++:
❌ 错误:
gcc main.cpp
✅ 正确:
g++ main.cpp
或:
gcc main.cpp -lstdc++ -lm
❌ 错误:
gcc main.c
# foo.c 没参与链接
✅ 正确:
gcc main.c foo.c -o app
或先编译再链接:
gcc -c foo.c
gcc main.c foo.o -o app
C 调用 C++ 函数时报 undefined reference。
✅ C++ 头文件中:
#ifdef __cplusplus
extern "C" {
#endif
void foo();
#ifdef __cplusplus
}
#endif
你可以照着检查:
undefined reference?-lxxx?*-dev 包?你可以直接把:
贴出来,我可以一行一行帮你改 ✅