温馨提示×

Ubuntu下C++怎样连接库

小樊
46
2026-07-18 07:22:37
栏目: 编程语言

在 Ubuntu 下用 C++ 连接(链接)库,一般分为 使用系统已安装库使用自己编译的库 两种情况。下面按常见方式系统说明。


一、基本概念

  • 编译(compile):把 .cpp 变成 .o
  • 链接(link):把 .o库文件 合并成可执行文件
  • 库分两种:
    • 静态库.a
    • 动态库.so

二、连接系统已安装的库(最常见)

示例:使用 pthread

// test.cpp
#include <pthread.h>
#include <iostream>

void* func(void*) {
    std::cout << "Hello\n";
    return nullptr;
}

int main() {
    pthread_t t;
    pthread_create(&t, nullptr, func, nullptr);
    pthread_join(t, nullptr);
}

编译并连接库

g++ test.cpp -o test -lpthread

-l 表示链接库
pthread 会自动找 /usr/lib/x86_64-linux-gnu/libpthread.so


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

示例: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 -lopencv_highgui

四、连接自己写的库

1️⃣ 写库代码

mylib.h

#pragma once
void hello();

mylib.cpp

#include <iostream>
void hello() {
    std::cout << "Hello Library\n";
}

main.cpp

#include "mylib.h"
int main() {
    hello();
}

2️⃣ 生成静态库(.a

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

使用静态库

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

-L.:在当前目录找库
-lmyliblibmylib.a


3️⃣ 生成动态库(.so

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

使用动态库

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

⚠️ 运行时需要告诉系统库在哪:

export LD_LIBRARY_PATH=.
./main

或安装到系统路径:

sudo cp libmylib.so /usr/lib/
sudo ldconfig

五、使用 CMake(推荐)

示例 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo)

add_library(mylib SHARED mylib.cpp)

add_executable(main main.cpp)
target_link_libraries(main mylib)

构建

mkdir build
cd build
cmake ..
make

六、常用编译参数总结

参数 作用
-I 指定头文件路径
-L 指定库路径
-l 链接库
-shared 生成动态库
-fPIC 位置无关代码
-static 强制静态链接

七、常见问题

❓ undefined reference

  • 忘了 -l
  • 顺序错误(库放后面)
  • 库路径不对

❓ cannot open shared object

  • LD_LIBRARY_PATH 没设置
  • ldconfig

如果你有 具体库(如 MySQL、Boost、OpenCV、CUDA、FFmpeg),可以告诉我,我可以给你 完整可运行的示例

0