温馨提示×

centos中c++如何链接库文件

小樊
35
2026-10-14 19:25:25
栏目: 编程语言

在 CentOS 下用 C++ 链接库文件,一般分为 系统库、第三方库、自己编译的库 三种情况。下面从基础到常见坑给你系统讲一下。


一、编译和链接的基本流程

C++ 编译通常分两步:

g++ -c main.cpp -o main.o        # 编译
g++ main.o -o app -lxxx          # 链接

或者一步完成:

g++ main.cpp -o app -lxxx

二、链接系统库(最常见)

示例:使用 pthread

g++ main.cpp -o app -lpthread

常见系统库

功能 库名 链接方式
线程 pthread -lpthread
数学 math -lm
动态库 dl -ldl

三、链接第三方库(如 OpenCV、Boost)

1️⃣ 安装开发库(CentOS)

sudo yum install opencv-devel

2️⃣ 编译时链接

g++ main.cpp -o app `pkg-config --cflags --libs opencv`

✅ 推荐用 pkg-config,自动处理头文件和库路径


四、链接自己编译的库(重点)

1️⃣ 编译静态库 .a

g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o

使用:

g++ main.cpp -o app -L. -lmylib

2️⃣ 编译动态库 .so

g++ -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 路径
  • 名字是否正确(libxxx.so / libxxx.a)

❌ undefined reference

✅ 检查:

  • 链接顺序(库放后面)
  • 是否忘了 -l

❌ 运行时找不到 .so

✅ 解决:

ldconfig

或

export LD_LIBRARY_PATH=...

八、CMake 方式(进阶推荐)

find_library(MYLIB mylib PATHS /path/to/lib)
target_link_libraries(app ${MYLIB})

如果你有 具体库名(如 boost / openssl / 自建库),或者 报错信息,可以直接贴出来,我可以帮你精确分析。

0 踩