在 Ubuntu 下用 C++ 连接(链接)库,一般分为 使用系统已安装库 和 使用自己编译的库 两种情况。下面按常见方式系统说明。
.cpp 变成 .o.o 和 库文件 合并成可执行文件.a.sopthread 库// test.cpp
#include <pthread.h>
#include <iostream>
void* func(void*) {
std::cout << "Hello\n";
return nullptr;
}
int main() {
pthread_t t;
pthread_create(&t, nullptr, func, nullptr);
pthread_join(t, nullptr);
}
g++ test.cpp -o test -lpthread
✅ -l 表示链接库
✅ pthread 会自动找 /usr/lib/x86_64-linux-gnu/libpthread.so
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();
}
.a)g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
g++ main.cpp -o main -L. -lmylib
✅ -L.:在当前目录找库
✅ -lmylib → libmylib.a
.so)g++ -fPIC -shared mylib.cpp -o libmylib.so
g++ main.cpp -o main -L. -lmylib
⚠️ 运行时需要告诉系统库在哪:
export 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
| 参数 | 作用 |
|---|---|
-I |
指定头文件路径 |
-L |
指定库路径 |
-l |
链接库 |
-shared |
生成动态库 |
-fPIC |
位置无关代码 |
-static |
强制静态链接 |
-lLD_LIBRARY_PATH 没设置ldconfig如果你有 具体库(如 MySQL、Boost、OpenCV、CUDA、FFmpeg),可以告诉我,我可以给你 完整可运行的示例。