温馨提示×

ubuntu c++如何链接库文件

小樊
52
2026-09-20 16:43:21
栏目: 编程语言

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


一、基本概念

  • 头文件(.h):编译时需要
  • 库文件:
    • 静态库:.a
    • 动态库:.so
  • 编译阶段:g++ 找头文件
  • 链接阶段:g++ 找库文件

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

例如使用 pthread、math

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

说明:

  • -lxxx 表示链接 libxxx.so 或 libxxx.a
  • 系统库一般在 /usr/lib、/lib

三、链接自己或第三方的库(指定路径)

1️⃣ 指定库路径和库名

假设:

./lib/libfoo.so
./include/foo.h
g++ main.cpp -o main \
  -I./include \
  -L./lib \
  -lfoo

参数说明:

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

四、静态库 vs 动态库

静态库(.a)

g++ main.cpp -L./lib -lfoo -static

或明确指定:

g++ main.cpp ./lib/libfoo.a -o main

动态库(.so)

运行时需要能找到 .so:

export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
./main

或安装到系统:

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

五、使用 CMake(推荐)

CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.10)
project(demo)

find_package(Threads REQUIRED)

include_directories(${CMAKE_SOURCE_DIR}/include)
link_directories(${CMAKE_SOURCE_DIR}/lib)

add_executable(main main.cpp)
target_link_libraries(main foo pthread)

构建:

mkdir build && cd build
cmake ..
make

六、查看链接情况

ldd main

查看依赖的动态库。


七、常见错误

❌ cannot find -lfoo

  • 检查 -L 路径
  • 检查文件名是否为 libfoo.so

❌ undefined reference

  • 链接顺序问题(库放后面)
  • 没加 -lxxx

❌ 运行时 cannot open shared object

  • 设置 LD_LIBRARY_PATH
  • 或 sudo ldconfig

如果你有 具体库名 / 编译报错 / CMake 或 Makefile 场景,可以贴出来,我可以直接帮你改。

0 踩