温馨提示×

如何在ubuntu连接c++库

小樊
43
2026-09-05 11:56:07
栏目: 编程语言

在 Ubuntu 上“连接 C++ 库”通常包含两层含义之一:

  1. 在 C++ 代码中调用(链接)已有的 C/C++ 库
  2. 自己写一个 C++ 库,并让其他程序连接使用

下面我分别说明常见做法,并给出示例。


一、使用系统已安装的 C++ 库(最常见)

1. 安装库(以示例库为例)

sudo apt update
sudo apt install libboost-dev

2. 编写 C++ 程序

// main.cpp
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <string>

int main() {
    std::string s = "hello world";
    boost::to_upper(s);
    std::cout << s << std::endl;
    return 0;
}

3. 编译并链接库

g++ main.cpp -o main -lboost_system

说明:

  • -l 后面是库名(去掉 lib.so
  • 头文件一般在 /usr/include
  • 库文件一般在 /usr/lib/usr/lib/x86_64-linux-gnu

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

安装

sudo apt install libopencv-dev

编译

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

或使用 CMake(推荐):

find_package(OpenCV REQUIRED)
target_link_libraries(app ${OpenCV_LIBS})

三、连接自己写的 C++ 库

1. 写库代码

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

2. 编译为静态库

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

3. 使用库

// main.cpp
#include "mylib.h"
int main() {
    hello();
}
g++ main.cpp -L. -lmylib -o app
  • -L.:库路径
  • -lmylib:链接 libmylib.a

四、动态库(.so)方式(推荐)

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

使用:

g++ main.cpp -L. -lmylib -o app
export LD_LIBRARY_PATH=.
./app

五、使用 CMake(工程级推荐)

cmake_minimum_required(VERSION 3.10)
project(demo)

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

六、常见问题

1. 找不到库

cannot find -lxxx

解决:

  • 确认库已安装
  • 使用 -L/path/to/lib

2. 运行时找不到 .so

error while loading shared libraries

解决:

export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH

或:

sudo ldconfig

如果你能具体说明:

  • 哪个库(如 Boost / OpenCV / 自写库)
  • g++ 还是 CMake
  • 链接静态还是动态库

我可以给你更精确的命令示例。

0