pkg-config介绍

发布时间:2026/6/25 13:47:22
pkg-config介绍 接着前面的博客此篇不聊ROS2聊聊pkg-config的使用一. 概念了解1. pkg-config 只是查询工具只负责读取.pc文件输出编译参数不具备下载、编译、安装软件的能力。.pc是 pkg-config 的配置文件作用 编译时自动提供库的-I头文件路径、-L库目录、-l链接名、编译宏、版本、依赖等参数。 只要项目 / 库支持pkg-config, 就会提供对应的.pc文件。比如# 一次性拼接参数编译 g main.cpp -o main pkg-config --cflags --libs opencv4很多童鞋接触它是因为配置Opencv的原因但得知道不仅仅opencv带.pc文件用于被pkg-config管理。诸如fftw3.pceigen3.pc文件。拿博主Jetson Orin Nano板子上来看2. 安装pkg-config可使用如下命令sudo apt update sudo apt install pkg-config3. 生成.pc文件的方式1apt/dnf 系统包安装libxxx-dev- 绝大多数会自动带.pc无需手动开启2源码编译的时候开启pkg-config功能Autotools./configure make老牌库默认自动生成.pc无开关代表库libpng、zlib、fftw、glib、libjpeg、v4l-utilsMeson构建现代图形库gtk4、gstreamer、libcamera默认开启自动生成 pcCMake构建OpenCV、Ceres、g2o、PCL、Eigen- 分库开关名称不统一必须手动加参数开启CMake 库没有统一标准开关每个库自定义 option不写对应开关就不会生成.pc。我们拿opencv来举例。如何使用编译工具编译Opencv的方法见如下博客【如下当时是做交叉编译】可看到图形化编译工具可以直接去勾选很多设置选项从而对是否生成.pc文件进行管控。Ubuntu下的基本知识点二_libxcb-CSDN博客Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_树莓派交叉编译opencv-CSDN博客二. 默认库或默认搜索文件路径1. 编译和运行程序时系统预制了一套默认公共路径系统自带软件、apt 安装的库放在里面开箱即用。省的在~/.bashrc中手动去添加搜索路径。但碰到源码编译安装软件或者想多版本共存时不想去破坏其它已有的目录但又想容易切换版本那么可以去手动添加自定义路径自己去配置。2. 如下代码可查看默认的搜索路径不需要在~/.bashrc中手动添加ld --verbose | grep SEARCH_DIR | tr -s ; \n3. 拿opencv举例我们先看下系统上生效的opencv的版本pkg-config --modversion opencv4如下命令可查看完整编译参数包含路径pkg-config --cflags --libs opencv44. 含有多个Opencv版本时就会有多个对应的opencv.pc配置文件如下命令可查找文件位置sudo find /usr -name opencv4.pc 2/dev/null5. 我们去打开这个两个文件分别看下opencv的版本6. 由于上面第3步打印了当前opencv的版本输出是4.10.0版本那么便可知用的哪个位置的opencv版本了。这里我们创建test_opencv.cpp简单测试下代码如下#include opencv2/core/core.hpp #include opencv2/opencv.hpp #include iostream using namespace cv; using namespace std; int main() { Mat img imread(/home/jetson/myfiles/lena_color_256.tif); std::cout read ok std::endl; imshow(image, img); waitKey(0); return 0; }运行效果如下这里由于Ubuntu的默认搜索位置下存在.pc文件所以并不需在~/.bashrc文件中手动添加路径省去了一些操作。三.自己手动添加路径如果默认搜索路径下没有.pc文件或者想指定opencv的版本切换版本比如切成上面/usr/lib/aarch64-linux-gnu下的那么可以打开~/.bashrc在里面增加如下语句结束后别忘了加source ~/.bashrc语句更新下环境再次执行如下语句使用如下命令行编译都可以成功运行g test_opencv.cpp -o test_opencv.out $(pkg-config --cflags --libs opencv4) -lpthread -lrt -ldl aarch64-linux-gnu-g test_opencv.cpp -o test_opencv.out $(pkg-config --cflags --libs opencv4) -lpthread -lrt -ldl所以很多库路径虽然在~/.bashrc中没有手动看到但不表示其没有安装只是它放在了很多默认搜索路径下。apt安装时默认会装到默认搜索路径下么所以不用手动在~/.bashrc中配置。如上例子也说明了通过opencv.pc配置的简便性。如上只是说明默认搜索路径以及手动添加路径的好处同时能看到这也是切换版本的方法之一。附如下命令可查看Jetson Orin Nano板子的架构本机编译程序直接用系统自带gtarget:aarch64-linux-gnu