在 Ubuntu 上用 gcc 编译时提示“找不到库”(如 cannot find -lxxx 或 No such file or directory),通常有以下几种常见原因和对应解决办法。
/usr/bin/ld: cannot find -lxxx
系统里 没有安装对应的库。
先确认库名
例如 libxxx.so,Ubuntu 中通常包名是 libxxx-dev
安装开发库(包含头文件和 .so)
sudo apt update
sudo apt install libxxx-dev
✅ 示例:
sudo apt install libssl-dev
sudo apt install libcurl4-openssl-dev
cannot find -lxxx
你只装了:
libxxx
但 gcc 需要:
libxxx-dev
sudo apt install libxxx-dev
cannot find -lxxx
但你知道库已经存在,例如:
/usr/local/lib/libxxx.so
gcc/ld 默认只搜:
/usr/lib/lib/usr/lib/x86_64-linux-gnu-L 指定路径gcc main.c -L/usr/local/lib -lxxx
sudo vim /etc/ld.so.conf.d/mylib.conf
写入:
/usr/local/lib
然后执行:
sudo ldconfig
Skipping incompatible /usr/lib/libxxx.so
cannot find -lxxx
gcc main.c -lxxx
sudo apt install gcc-multilib
gcc -m32 main.c -lxxx
cannot find -lxxx
gcc 的 -lxxx 只认:
libxxx.so
libxxx.a
如果你的是:
xxx.so
libxxx.so.1
都不行。
建立软链接:
sudo ln -s libxxx.so.1 /usr/lib/libxxx.so
undefined reference to ...
gcc 链接顺序错误(从左到右)
把 -l 放最后:
gcc main.c -L. -lxxx
gcc -print-search-dirs
查看某个库是否被找到:
ldconfig -p | grep xxx
| 报错原因 | 解决方法 |
|---|---|
| 没装库 | apt install libxxx-dev |
| 路径不对 | -L路径 或 ldconfig |
| 位数不匹配 | 装对应架构库 |
| 文件名不对 | libxxx.so |
| 链接顺序 | -l 放最后 |
如果你愿意,可以把 完整的 gcc 报错信息 或 编译命令 发出来,我可以直接帮你定位是哪一条原因。