温馨提示×

ubuntu c++库文件怎么配置

小樊
49
2026-08-01 19:57:56
栏目: 编程语言

Ubuntu 下配置 C++ 库文件,通常分为 系统库、第三方库、自己写的库 三种情况。下面按最常见、最实用的方式给你一个完整说明。


一、基本概念(先搞清楚)

在 Linux 下,C++ 库主要涉及:

类型 说明
头文件(.h) 编译时需要
库文件(.so / .a) 链接时需要
include 路径 头文件所在目录
lib 路径 库文件所在目录
  • .so:动态库(运行时需要)
  • .a:静态库(编译时直接打包)

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

1️⃣ 安装库(apt)

例如安装 opencv

sudo apt update
sudo apt install libopencv-dev

安装后一般位置:

  • 头文件:/usr/include
  • 库文件:/usr/lib/usr/lib/x86_64-linux-gnu

2️⃣ 编译时链接库

示例:使用 pthread

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

编译:

g++ test.cpp -o test -lpthread

✅ 系统库 不需要指定路径


三、使用第三方库(非系统默认)

情况 1:库已安装但不在默认路径

假设:

  • 头文件:/opt/mylib/include
  • 库文件:/opt/mylib/lib

编译指令

g++ main.cpp \
-I/opt/mylib/include \
-L/opt/mylib/lib \
-lmylib \
-o main

说明:

  • -I:指定头文件路径
  • -L:指定库文件路径
  • -lxxx:链接 libxxx.solibxxx.a

情况 2:运行时找不到 .so

运行报错:

error while loading shared libraries: libxxx.so

解决方法(任选一种)

✅ 方法 1:临时生效

export LD_LIBRARY_PATH=/opt/mylib/lib:$LD_LIBRARY_PATH

✅ 方法 2:永久生效(推荐)

sudo vim /etc/ld.so.conf.d/mylib.conf

写入:

/opt/mylib/lib

然后执行:

sudo ldconfig

四、自己写 C++ 库并配置

1️⃣ 写库代码

mylib.h

#pragma once
void hello();

mylib.cpp

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

2️⃣ 编译成库

静态库(.a)

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

动态库(.so)

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

3️⃣ 使用自己写的库

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

五、使用 CMake 配置(强烈推荐)

示例 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo)

# 头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)

# 库路径
link_directories(${PROJECT_SOURCE_DIR}/lib)

# 生成可执行文件
add_executable(demo main.cpp)

# 链接库
target_link_libraries(demo mylib)

构建:

mkdir build
cd build
cmake ..
make

六、常见错误排查

❌ 找不到头文件

fatal error: xxx.h: No such file or directory

✅ 检查 -I 路径是否正确


❌ 找不到库

cannot find -lxxx

✅ 检查:

  • 库名是否正确
  • -L 路径是否正确
  • 库文件是否存在

❌ 运行时找不到 .so

✅ 使用:

ldd ./main

查看依赖


七、总结(速查表)

需求 命令
安装库 apt install libxxx-dev
指定头文件 -I/path
指定库路径 -L/path
链接库 -lxxx
动态库生效 ldconfig
查看依赖 ldd

如果你有 具体库名(如 OpenCV / Boost / CUDA / 自己写的库)报错信息,可以直接贴出来,我可以一步一步帮你配 ✅

0