温馨提示×

centos中c++怎样链接库文件

小樊
59
2026-09-02 23:23:20
栏目: 编程语言

在 CentOS 中使用 C++ 链接库文件,通常分为系统库、第三方库、自己写的库几种情况。下面按常见场景说明。


一、基本概念

  • 编译(Compile):g++ -c xxx.cpp
  • 链接(Link):把目标文件和库文件合并成可执行文件
  • 库分为:
    • 静态库:.a
    • 动态库:.so

二、使用系统已安装的库(最常见)

例如链接 pthread、math 库:

g++ main.cpp -o main -lpthread -lm

说明:

  • -l 后面跟库名(去掉 lib 和扩展名)
  • libpthread.so → -lpthread

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

1️⃣ 通过 yum 安装

sudo yum install opencv-devel

编译:

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

2️⃣ 手动指定路径(未安装到系统目录)

假设库在:

/home/user/libs/libfoo.so
/home/user/include/foo.h

编译命令:

g++ main.cpp -o main \
  -I/home/user/include \
  -L/home/user/libs \
  -lfoo

参数说明:

  • -I:头文件路径
  • -L:库文件路径
  • -lfoo:链接 libfoo.so

四、链接自己写的库

1️⃣ 静态库(.a)

g++ -c foo.cpp -o foo.o
ar rcs libfoo.a foo.o
g++ main.cpp -L. -lfoo -o main

2️⃣ 动态库(.so)

g++ -fPIC -shared foo.cpp -o libfoo.so
g++ main.cpp -L. -lfoo -o main

运行时需要让系统找到 .so:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main

或复制到系统目录:

sudo cp libfoo.so /usr/lib64/
sudo ldconfig

五、查看链接情况

ldd main

查看依赖的 .so 文件。


六、常见错误

❌ 找不到库

cannot find -lfoo

✅ 检查:

  • 是否在 -L 指定路径
  • 文件名是否为 libfoo.so

❌ 运行时找不到 .so

error while loading shared libraries

✅ 解决:

  • LD_LIBRARY_PATH
  • /etc/ld.so.conf.d/
  • ldconfig

如果你有具体库名或报错信息,可以直接发出来,我可以帮你写完整编译命令。

0 踩