在 Ubuntu 下使用 gcc 链接库,常见情况如下:
大多数标准库(如 libm、libpthread)系统已自带,只需在编译时指定:
gcc main.c -o main -lm
说明:
-l 后面跟库名(去掉 lib 前缀和 .so/.a 后缀)libm.so → -lmlibpthread.so → -lpthread如果库安装在标准路径(/usr/lib, /usr/local/lib):
gcc main.c -o main -lxxx
如果是头文件不在标准路径:
gcc main.c -o main -I/usr/include/xxx -lxxx
gcc -c mylib.c -o mylib.o
ar rcs libmylib.a mylib.o
使用:
gcc main.c -L. -lmylib -o main
gcc -fPIC -shared mylib.c -o libmylib.so
使用:
gcc main.c -L. -lmylib -o main
运行时若提示找不到 .so:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
或安装到系统:
sudo cp libmylib.so /usr/local/lib
sudo ldconfig
| 参数 | 作用 |
|---|---|
-lxxx |
链接 libxxx |
-L/path |
指定库搜索路径 |
-I/path |
指定头文件路径 |
-static |
强制静态链接 |
-Wl,--no-as-needed |
防止库被优化掉 |
ldd main
❌ undefined reference to xxx
→ 没加 -lxxx 或链接顺序不对(库放后面)
❌ cannot find -lxxx
→ 没安装库或 -L 路径不对
如果你有具体库名或报错信息,可以贴出来,我帮你精确解决。