在 Ubuntu 下用 C++ 链接库,通常分 系统已安装库 和 自己编译的库 两种情况。下面从基础到常见场景讲清楚。
库分两种:
.a 文件(编译时直接打包进程序).so 文件(运行时加载)链接方式:
pthread(线程库)g++ main.cpp -o main -lpthread
opencvg++ 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
常用参数说明:
-I :头文件路径-L :库文件路径-lxxx :链接 libxxx.so 或 libxxx.a⚠️ 注意:
-l 后面 不要写 lib 和扩展名-l 要放在源文件后面g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
使用:
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
或把 .so 放到:
/usr/lib
/usr/local/lib
然后执行:
sudo ldconfig
find_package(OpenCV REQUIRED)
target_link_libraries(main ${OpenCV_LIBS})
add_library(mylib SHARED mylib.cpp)
target_link_libraries(main mylib)
❌ undefined reference
g++ -lmylib main.cpp(错误)g++ main.cpp -lmylib❌ 找不到 .so
LD_LIBRARY_PATHldconfig❌ 头文件找不到
-I# 看程序依赖的库
ldd ./main
# 看库里有什么符号
nm -D libmylib.so
如果你有 具体库名(如 boost / protobuf / cuda) 或 报错信息,可以直接贴出来,我可以给你精确命令。