在 CentOS 下用 C++ 链接库文件,一般分为 系统库、第三方库、自己编译的库 三种情况。下面从基础到常见坑给你系统讲一下。
C++ 编译通常分两步:
g++ -c main.cpp -o main.o # 编译
g++ main.o -o app -lxxx # 链接
或者一步完成:
g++ main.cpp -o app -lxxx
pthreadg++ main.cpp -o app -lpthread
| 功能 | 库名 | 链接方式 |
|---|---|---|
| 线程 | pthread | -lpthread |
| 数学 | math | -lm |
| 动态库 | dl | -ldl |
sudo yum install opencv-devel
g++ main.cpp -o app `pkg-config --cflags --libs opencv`
✅ 推荐用
pkg-config,自动处理头文件和库路径
.ag++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
使用:
g++ main.cpp -o app -L. -lmylib
.sog++ -fPIC -shared mylib.cpp -o libmylib.so
使用:
g++ main.cpp -o app -L. -lmylib
⚠️ 运行时还要告诉系统库位置:
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
./app
或:
sudo cp libmylib.so /usr/lib64/
sudo ldconfig
| 参数 | 作用 |
|---|---|
-I |
指定头文件路径 |
-L |
指定库文件路径 |
-l |
链接库(去掉 lib 和扩展名) |
-pthread |
线程安全 |
-static |
静态链接 |
示例:
g++ main.cpp -I/include -L/lib -lmylib -lpthread
ldd app
cannot find -lxxx✅ 检查:
-L 路径undefined reference✅ 检查:
-l.so✅ 解决:
ldconfig
或
export LD_LIBRARY_PATH=...
find_library(MYLIB mylib PATHS /path/to/lib)
target_link_libraries(app ${MYLIB})
如果你有 具体库名(如 boost / openssl / 自建库),或者 报错信息,可以直接贴出来,我可以帮你精确分析。