在 Ubuntu 下用 C++ 链接库,通常分为 编译期 和 链接期 两个阶段。下面按常见场景给你一个完整说明。
.a:静态库.so:动态库(共享库)libpthread#include <pthread.h>
int main() {
return 0;
}
编译并链接:
g++ main.cpp -o main -lpthread
✅ -l 表示链接库
✅ 库名是 pthread,对应 /lib/x86_64-linux-gnu/libpthread.so
sudo apt update
sudo apt install libopencv-dev
g++ main.cpp -o main `pkg-config --cflags --libs opencv4`
或者手动:
g++ main.cpp -o main \
-I/usr/include/opencv4 \
-L/usr/lib/x86_64-linux-gnu \
-lopencv_core -lopencv_imgproc -lopencv_highgui
mylib.h#pragma once
void hello();
mylib.cpp#include <iostream>
void hello() {
std::cout << "Hello Library\n";
}
main.cpp#include "mylib.h"
int main() {
hello();
}
g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
链接:
g++ main.cpp -o main -L. -lmylib
✅ -L.:在当前目录找库
✅ -lmylib → libmylib.a
g++ -fPIC -shared mylib.cpp -o libmylib.so
链接:
g++ main.cpp -o main -L. -lmylib
运行时需要让系统找到 .so:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main
或安装到系统:
sudo cp libmylib.so /usr/lib/
sudo ldconfig
cmake_minimum_required(VERSION 3.10)
project(demo)
add_library(mylib SHARED mylib.cpp)
add_executable(main main.cpp)
target_link_libraries(main mylib)
构建:
mkdir build
cd build
cmake ..
make
undefined reference to xxx-lxxxcannot find -lxxx-L 路径不对error while loading shared libraries.so 不在动态库搜索路径LD_LIBRARY_PATH 或 ldconfig# 查看库依赖
ldd ./main
# 查看库导出符号
nm libxxx.so
# 查找库位置
locate libxxx.so
如果你有具体库名(如 Boost、OpenCV、CUDA、protobuf)或报错信息,可以贴出来,我可以针对你的情况详细讲。