温馨提示×

linux c++配置怎么链接库

小樊
46
2026-09-08 03:02:19
栏目: 编程语言

在 Linux 下用 C++ 链接库,通常分两种情况:静态库(.a) 和 动态库(.so)。下面从原理到常见做法给你一个清晰说明。


一、基本概念

  • 静态库:libxxx.a
  • 动态库:libxxx.so
  • 编译命令中库写作:-lxxx(去掉 lib 和扩展名)

例如:

libmylib.a   -> -lmylib
libmylib.so  -> -lmylib

二、编译时链接库(最常用)

1️⃣ 使用 g++ 直接链接

g++ main.cpp -o main -lmylib

如果库不在系统默认路径(/usr/lib, /lib):

g++ main.cpp -o main \
  -L/path/to/lib \
  -lmylib

-L:指定库路径
-l:指定库名


2️⃣ 同时指定头文件路径

g++ main.cpp -o main \
  -I/path/to/include \
  -L/path/to/lib \
  -lmylib

三、静态库 vs 动态库链接方式

✅ 链接静态库(强制静态)

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

或:

g++ main.cpp libmylib.a -o main

✅ 链接动态库(默认)

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

运行时要能找到 .so:

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

或:

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

四、查看链接情况

查看使用了哪些动态库

ldd main

查看库符号

nm libmylib.a
nm -D libmylib.so

五、用 CMake 配置(推荐)

CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.10)
project(demo)

find_package(Threads REQUIRED)

include_directories(/path/to/include)
link_directories(/path/to/lib)

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

或现代写法(推荐):

target_include_directories(main PRIVATE /path/to/include)
target_link_directories(main PRIVATE /path/to/lib)
target_link_libraries(main PRIVATE mylib)

六、常见错误 & 解决

❌ 找不到库

cannot find -lmylib

✅ 检查:

  • 文件名是否为 libmylib.so / .a
  • -L 路径是否正确
  • 是否写成了 -lmylib

❌ 运行时找不到 .so

error while loading shared libraries

✅ 解决:

export LD_LIBRARY_PATH=路径:$LD_LIBRARY_PATH

或安装到系统目录 + ldconfig


七、总结一句话

Linux C++ 链接库 = -I 找头文件 + -L 找库 + -l 链接库

如果你有:

  • 具体库(如 OpenCV / Boost / 自建库)
  • 使用 Makefile 还是 CMake
  • 静态还是动态

可以告诉我,我给你针对性配置示例。

0 踩