在 Ubuntu 下用 C++ 连接(链接)库,一般分为 系统库、第三方库、自己写的库 几种情况。下面按常见方式一步步说明。
.cpp 变成 .o.o 和库(.a / .so)合并成可执行文件库分为:
.a(编译时拷贝进程序).so(运行时加载)例如使用 pthread、math、opencv 等。
// test.cpp
#include <cmath>
#include <iostream>
int main() {
std::cout << sqrt(2.0) << std::endl;
}
编译:
g++ test.cpp -o test -lm
-lm 表示链接 libm.sog++ test.cpp -o test -lpthread
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
写库代码
// mylib.cpp
#include <iostream>
void hello() {
std::cout << "Hello Library" << std::endl;
}
// mylib.h
void hello();
生成静态库
g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
使用库
// main.cpp
#include "mylib.h"
int main() {
hello();
}
g++ main.cpp -L. -lmylib -o main
生成动态库
g++ -fPIC -shared mylib.cpp -o libmylib.so
使用
g++ main.cpp -L. -lmylib -o main
运行时找库
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main
或安装到系统:
sudo cp libmylib.so /usr/lib/
cmake_minimum_required(VERSION 3.10)
project(demo)
add_executable(demo main.cpp)
# 链接系统库
target_link_libraries(demo pthread)
# 链接自己或第三方库
target_link_libraries(demo mylib)
mkdir build && cd build
cmake ..
make
❌ undefined reference to ...
-lxxx❌ cannot find -lxxx
-L 路径不对如果你有 具体的库名或代码,可以直接发出来,我可以给你写完整的编译命令。