尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

pkg-config介绍

pkg-config介绍
📅 发布时间:2026/6/25 13:55:34

接着前面的博客,此篇不聊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.pc,eigen3.pc文件。拿博主Jetson Orin Nano板子上来看,

2. 安装pkg-config,可使用如下命令

sudo apt update sudo apt install pkg-config

3. 生成.pc文件的方式

1)apt/dnf 系统包安装(libxxx-dev)- 绝大多数会自动带.pc,无需手动开启

2)源码编译的时候,开启pkg-config功能

Autotools(./configure && make)老牌库:默认自动生成.pc,无开关,代表库:libpng、zlib、fftw、glib、libjpeg、v4l-utils

Meson构建(现代图形库:gtk4、gstreamer、libcamera):默认开启自动生成 pc

CMake构建(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 ' ;' '\n'

3. 拿opencv举例,我们先看下系统上生效的opencv的版本

pkg-config --modversion opencv4

如下命令可查看完整编译参数(包含路径)

pkg-config --cflags --libs opencv4

4. 含有多个Opencv版本时,就会有多个对应的opencv.pc配置文件,如下命令可查找文件位置

sudo find /usr -name "opencv4.pc" 2>/dev/null

5. 我们去打开这个两个文件,分别看下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板子的架构

本机编译程序:直接用系统自带g++(target:aarch64-linux-gnu)

相关新闻

  • 2026零基础录音转文字入门指南避坑教学包教包会看完可直接上手
  • 如何用3分钟解锁15+加密音乐格式:浏览器中的音乐自由革命
  • 【操作系统】进程调度算法(FCFS/SJF/优先级/时间片轮转)

最新新闻

  • 数据库开发实践
  • Java集合框架源码分析与性能比较
  • 西安全免费安装维保停车系统对比:富平图科选购指南
  • 奥雅借AI重构设计商业模式:从改图到审美平权,开启空间智能新时代!
  • HAMAMATSU C8779K-01扫描单元
  • 终极AI视频插帧指南:用Flowframes轻松提升视频流畅度的完整教程

日新闻

  • Qwen2.5-Turbo百万上下文实战指南:百炼平台长文本处理全解析
  • 怎么监控对标账号更新,2026年作者监控工作流,5款深度对比
  • EdgeRemover:专业级Windows Edge浏览器管理工具,彻底解决顽固软件卸载难题

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号