pkg-config到底是个啥

CMake使用pkg-config # 添加pkg依赖xxx yyy zzz INCLUDE(FindPkgConfig) pkg_check_modules(PKGS_DEP REQUIRED xxx yyy zzz ) # 上面的指令会生成 PKGS_DEP_CFLAGS 和 PKGS_DEP_LDFLAGS # 设置依赖pkg的CGLAGS FOREACH(flag ${PKGS_DEP_CFLAGS}) SET(EXTRA_CFLGAS "${EXTRA_CFLGAS} ${flag}") ENDFOREACH 阅读详情

Pkg-config到底是个啥


😄

Pkgconfig其实跟使用的CMakeList文件中的配置文件作用是一样的,都是为了在需要使用第三方头文件或库文件的时候告诉编译器头文件和库文件的位置

百度百科的解释是

pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。

使用方法

gcc -o test test.c $(pkg-config --libs --cflags libpng)

当安装一个库的时候,会有一个.pc文件,通过pc文件就能知道所需要的头文件和库所在的位置。

其中cflags指定的是头文件

其中libs指定的是库文件

如何找到pc文件???

在linux系统下面,默认查找的路径是/usr/lib64/pkgconfig

当然可以手动指定,也就是通过设置PKG_CONFIG_PATH这个环境变量来进行指定路径下查找.pc文件

makefile中使用pkgconfig

在Cmake的文件中的时候可以使用FindPkgConfig进行查找pkg-config模块

PKGCONFIG(package includedir libdir linkflags cflags)

例如

PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) 

makefile书写规则

makefile使用

CFLAGS=-Wall -g -std=c++11 `pkg-config --cflags --libs opencv realsense2`

如何编写PC文件

prefix=/home/zhongsy/Downloads/Game/gaminganywhere/deps.posix
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include

Name: libavdevice
Description: FFmpeg device handling library
Version: 56.4.100
Requires: 
Requires.private: libavfilter >= 5.40.101, libswscale >= 3.1.101, libpostproc >= 53.3.100, libavformat >= 56.40.101, libavcodec >= 56.60.100, libswresample >= 1.2.101, libavutil >= 54.31.100
Conflicts:
Libs: -L${libdir}  -lavdevice 
Libs.private: -lXv -lX11 -lXext -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb-render -lxcb-shape -lxcb -lxcb-shape -lxcb -lX11 -lsndio -lasound -lxvidcore -L/home/zhongsy/Downloads/Game/gaminganywhere/deps.posix/lib -lx265 -lx264 -lvpx -lm -lvpx -lm -lvpx -lm -lvpx -lm -lvorbisenc -lvorbis -logg -ltheoraenc -ltheoradec -logg -lopus -lmp3lame -lm -llzma -lbz2 -lz -pthread
Cflags: -I${includedir}

在pc文件中主要有的是一下几个变量

  1. Name 名称
  2. Description 描述
  3. version 版本
  4. cflags 所需要使用头文件的目录路径
  5. libs 所需要库文件的目录路径

参考

Cmake findpakage详解

Cmake教程

【ffmpeg源码学习】详解pkg-config的作用 摘要: pkg-config是简化C/C++项目构建的工具,通过查询.pc文件自动获取库的编译链接参数。FFmpeg等库会安装.pc文件,记录头文件路径、库依赖等信息。开发者可通过pkg-config --cflags --libs命令快速生成编译选项,无需手动维护路径。使用时需注意设置PKG_CONFIG_PATH环境变量指向.pc文件目录,并处理可能的动态库路径问题。该工具大幅提升了多库依赖项目的开发效率,但依赖库需正确安装并支持pkg-config机制。 阅读详情

相关推荐

linux基础 - pkg-config工具找库的搜索方式之PKG_CONFIG_PATH

在编译软件项目时,通常需要依赖于各种不同的库文件,这些库文件包含了程序所需的功能和资源。为了正确地编译和链接这些库,开发者需要告诉编译器和链接器库文件的位置。pkg-config 是一个常用的工具,用于帮助开发者查找、配置和获取库文件的信息,从而使编译过程更加简单和可靠。

sz66cm 学习随笔 1371

pkg-config

转载于:https://blog.youkuaiyun.com/newchenxf/article/details/51750239 1 什么是pkg-config pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息。 例子: pkg-config opencv –libs –cflags 结果: -I/usr/include/opencv /usr/l...

junlon2006的博客 1127

编译源码pkg-config报错问题(configure\pkg-config\PKG_CONFIG_PATH关系)

编译源码pkg-config报错问题: … d libraries… yes checking dynamic linker characteristics… (cached) GNU/Linux ld.so checking how to hardcode library paths into programs… immediate checking for pkg-config… /usr/bin/pkg-config checking pkg-config is at least version 0.

weixin_43269452的博客 7826

pkg-config用法详解

在如今这个开源的环境里,想要开发某个功能,我们都会下意识的上网搜索有没有开源库,如果有开源库,那么好,下载下来给它编译好,使用。但是在使用过程中,你是否遇到不知如何将第三方库编译,链接到自己的工程中?怎么改makefile就是改不好?是否看到开源库lib/中pkgconfig文件夹,想都没想这是干什么用的,打开.pc文件也不知所云?那么好,今天我就总结下开源库中pkgconfig文件夹中.pc文件的作用,以及如何用pkg-config工具将开源库集成到自己的工程中去。 1、pkg-config工具的作用

子曰小玖的博客 8881

理解 Linux 下 PKG_CONFIG_LIBDIR 和 PKG_CONFIG_PATH 的作用

pkg-config是一个用于查询已安装软件包的信息的工具,它主要用于检查和获取软件包的编译和链接标志。在交叉编译环境中,这个工具尤为重要,因为它帮助确保正确地定位和使用交叉编译的库和头文件。设置和是在交叉编译环境中确保正确库和头文件定位的关键步骤。这两个环境变量告诉 pkg-config 在哪里寻找.pc文件,以提供正确的库信息。在处理交叉编译环境时,正确配置这些变量是确保项目成功构建的不可或缺的一部分。

dmgy110的博客 2284

(程序设计方法与实践)达拉崩吧的酒宴

达拉崩吧的酒宴 Description 很久很久以前,巨龙突然出现,带来灾难带走了公主又消失不见,王国十分危险,世间谁最勇敢,一位勇者赶来大声喊:“我要带上最好的剑,翻过最高的山,闯进最深的森林,把公主带回到面前”……最后,英雄 达拉崩巴斑得贝迪卜多比鲁翁 ,他战胜了巨龙 昆图库塔卡提考特苏瓦西拉松 ,国王把公主 米娅莫拉苏娜丹妮谢莉红 嫁给了 达拉崩巴斑得贝迪卜多比鲁翁 。 于是国王第二天要在 蒙达鲁克硫斯伯古比奇巴勒城 举办酒宴,一共准备了 N 桶酒。此时一位忠诚的仆人来报,有人在其中一桶酒里下毒,

What_If_I的博客 892

如何安装pkg-config

在搭建go-filecoin测试节点的时候,需要先安装pkg-config,这里介绍在不同系统安装pkg-config的几种方法。 方法一: Mac上,可以直接用brew install pkg-config命令安装。 方法二: Linux上,到pkg-config官网https://www.freedesktop.org/wiki/Software/pkg-config/,下载最新安装包 目前,...

Charliewolf的博客 4万+

iphone查看/private/var/mobile/Containers/Data/Application/文件

xcode查看iPhone的private/var/文件夹xcode连接iPhone真机选择app下载Containers文件夹到mac电脑中查看手机中下载的文件 使用xcode真机调试的时候,文件目录都是这种/private/var/mobile/Containers/Data/Application/FAEFDF4D-5CE4-474F-9C53-C19789DB59F6/tmp/ xcode连接iPhone真机 不需要越狱,使用xcode上连接iPhone,然后选择运行的app,选择window-&g

小手琴师的博客 101万+

【Linux】PKG_CONFIG_PATH

目录 [ERROR]为了解决以下部署问题 一、什么是configure 二、什么是pkg-config 1、pkg-config介绍 2、pkg-config功能 3、glib-2.0的.pc文件内容举例 4、 环境变量PKG_CONFIG_PATH 三、运行时库的连接 [ERROR]为了解决以下部署问题 Package sentencepiece was not found in the pkg-config search path. Perhaps you shou

qq_36182852的博客 1万+

【蓝牙专题】HCI协议解析

一、概念: 很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller; 1、架构 如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上; HCI

蚂蚁的专栏 5069

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

pkg-config 详解

1 什么是pkg-config pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息。 例子: pkg-config opencv –libs –cflags 结果: -I/usr/include/opencv /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so /usr/lib/x86_64-linu...

mrwangwang的专栏 7375

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 820

Linux中pkg-config的使用

pkg-config在编译应用程序和库的时候作为一个工具来使用。pkg-config可以帮助你插入正确的编译选项,而不需要你通过硬编码的方式来找到glib(或其他库)。--cflags一般用于指定头文件,--libs一般用于指定库文件。大家应该都知道一般用第三方库的时候,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。对于一个比较大的第三方库,其头文件和库文件的数量是比较多的,如果我们一个个手动地写,那将是相当的麻烦的。

顺其自然~专栏 8100

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2283

《AgentScope-Java 深入浅出教程》第1章 AgentScope-Java 简介

AgentScope-Java 是一个面向智能体的编程框架,专门用于构建基于大语言模型(LLM)的 AI 应用程序。│ 你的业务应用 ││ AgentScope-Java 框架 ││ │ 智能体 │ │ 工具 │ │ 记忆 │ │ 模型 │ ││ LLM 服务 (DashScope/OpenAI/...) │能力说明类比ReAct 推理让智能体能够"思考"并"行动"就像人类思考后再做事工具调用让智能体能够执行外部操作就像人使用计算器、搜索引擎记忆管理让智能体能够记住对话历史。

步子哥的博客 592

configure、pkg-config、pkg_config_path三者的关系

简述configure、pkg-config、pkg_config_path三者的关系  转自:简述configure、pkg-config、pkg_config_path三者的关系   一、什么是configure   源码安装过程中大多会用到configure...

Jensen Lee的博客 701

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1314

pkg-config 详解

pkg-config是向用户向程序提供相应库的路径、版本号等信息的程序。

若有所思HS 1256

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pkg-config的用法

pkg-config的用法 pkg-config pkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。 譬如说我们运行以下命令: pkg-config 查看gcc的CFLAGS参数 $pkg-config--libs --cflags opencv 会显示如下信息: -I/usr/include/opencv -lcxcore -lc...

weixin_40592935的博客 1049

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: game-anywhere介绍
下一篇: 686. 重复叠加字符串匹配
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值