在 Linux 下用 C++ 使用“库文件”(静态库 .a 或动态库 .so)通常包含 三步:
下面按常见场景给你一个清晰说明。
| 类型 | 后缀 | 特点 |
|---|---|---|
| 静态库 | .a |
编译时直接打进可执行文件 |
| 动态库 | .so |
运行时加载,体积小 |
例如使用 pthread、math、opencv 等
#include <pthread.h>
#include <opencv2/opencv.hpp>
g++ main.cpp -o main -lpthread
g++ main.cpp -o main `pkg-config --cflags --libs opencv4`
说明:
-lxxx 表示链接 libxxx.so/usr/lib 或 /usr/local/lib.a / .so)假设目录结构:
project/
├── include/
│ └── mylib.h
├── lib/
│ ├── libmylib.a
│ └── libmylib.so
└── main.cpp
g++ -c mylib.cpp -Iinclude
ar rcs libmylib.a mylib.o
g++ -fPIC -shared mylib.cpp -Iinclude -o libmylib.so
g++ main.cpp -Iinclude -Llib -lmylib -o main
参数解释:
-Iinclude:头文件路径-Llib:库文件路径-lmylib:链接 libmylib⚠️ 顺序很重要:
g++ main.cpp -lmylib # ❌ 可能报错
g++ main.cpp -Llib -lmylib # ✅
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
./main
sudo cp libmylib.so /usr/local/lib
sudo ldconfig
然后直接运行:
./main
cmake_minimum_required(VERSION 3.10)
project(demo)
include_directories(${CMAKE_SOURCE_DIR}/include)
link_directories(${CMAKE_SOURCE_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main mylib)
❌ cannot find -lmylib
→ 检查 -L 路径和库名(去掉 lib 和 .so)
❌ undefined reference
→ 链接顺序错误,或没加 -l
❌ 运行时 cannot open shared object
→ LD_LIBRARY_PATH 或 ldconfig 没配置
如果你有 具体库名(如 OpenCV、Boost、自己写的库)或 报错信息,可以直接发给我,我可以按你的情况写完整示例。