温馨提示×

ubuntu c++怎样连接库

小樊
49
2026-10-14 04:46:02
栏目: 编程语言

在 Ubuntu 下用 C++ 连接(链接)库,一般分为 系统库、第三方库、自己写的库 几种情况。下面按常见方式一步步说明。


一、基本概念

  • 编译(compile):把 .cpp 变成 .o
  • 链接(link):把 .o 和库(.a / .so)合并成可执行文件

库分为:

  • 静态库:.a(编译时拷贝进程序)
  • 动态库:.so(运行时加载)

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

例如使用 pthread、math、opencv 等。

1️⃣ 简单示例:链接数学库

// test.cpp
#include <cmath>
#include <iostream>
int main() {
    std::cout << sqrt(2.0) << std::endl;
}

编译:

g++ test.cpp -o test -lm
  • -lm 表示链接 libm.so

2️⃣ 使用 pthread

g++ test.cpp -o test -lpthread

三、使用第三方库(如 OpenCV)

1️⃣ 安装库

sudo apt install libopencv-dev

2️⃣ 编译

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

或手动:

g++ main.cpp -o main -I/usr/include/opencv4 \
    -L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc

四、链接自己写的库

1️⃣ 静态库(.a)

写库代码

// mylib.cpp
#include <iostream>
void hello() {
    std::cout << "Hello Library" << std::endl;
}
// mylib.h
void hello();

生成静态库

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

使用库

// main.cpp
#include "mylib.h"
int main() {
    hello();
}
g++ main.cpp -L. -lmylib -o main

2️⃣ 动态库(.so)

生成动态库

g++ -fPIC -shared mylib.cpp -o libmylib.so

使用

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

运行时找库

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main

或安装到系统:

sudo cp libmylib.so /usr/lib/

五、使用 CMake(推荐方式)

cmake_minimum_required(VERSION 3.10)
project(demo)

add_executable(demo main.cpp)

# 链接系统库
target_link_libraries(demo pthread)

# 链接自己或第三方库
target_link_libraries(demo mylib)
mkdir build && cd build
cmake ..
make

六、常见错误

❌ undefined reference to ...

  • 没加 -lxxx
  • 库顺序错了(库要放在源文件后面)

❌ cannot find -lxxx

  • 没安装库
  • -L 路径不对

如果你有 具体的库名或代码,可以直接发出来,我可以给你写完整的编译命令。

0 踩