0
点赞
收藏
分享

微信扫一扫

gcc/g++编译参数引入工具pkg-config和*.pc

Jonescy 2022-11-01 阅读 68

pkg-config环境变量查询

第一条命令:pkg-config --variable pc_path pkg-config
第二条命令:echo $PKG_CONFIG_PATH

第一条命令展开:

/usr/local/lib/x86_64-linux-gnu/pkgconfig
/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/pkgconfig
/usr/share/pkgconfig

pkg-config作用

大家应该都知道用第三方库,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。

以安装的libuv库为例

库的路径

gcc/g++编译参数引入工具pkg-config和*.pc_环境变量

头文件路径

gcc/g++编译参数引入工具pkg-config和*.pc_库文件_02

libuv.pc文件

路径:

gcc/g++编译参数引入工具pkg-config和*.pc_环境变量_03

内容:

gcc/g++编译参数引入工具pkg-config和*.pc_环境变量_04

demo文件内容

#include <stdio.h>
#include <stdlib.h>
#include "uv.h"

int main() {
uv_loop_t *loop = (uv_loop_t*)malloc(sizeof(uv_loop_t));
uv_loop_init(loop);

printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);

uv_loop_close(loop);
free(loop);
return 0;
}

demo编译

g++ demo.cpp `pkg-config --cflags --libs libuv` -o demo

gcc/g++编译参数引入工具pkg-config和*.pc_库文件_05

上面的编译命令中,​​`pkg-config --cflags --libs libuv`​​的作用就如前面所说的, 去pkg-config配置的搜索路径中找到

libuv.pc,把libuv的头文件路径和库文件列出来,让编译去获取, --cflags和--libs分别指定头文件和库文件。

注意:命令中的`不是引号,而是数字1左边那个键位的那个符号。

gcc/g++编译参数引入工具pkg-config和*.pc_头文件_06

自定库的配置(.pc文件)

看到这里,大家可能想试一下将pkg-config用于自己的库。下面就说一下,怎么写。

首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位置。pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。

但pkg-config又是如何找到所需的.pc文件呢?

两种方式

  1. 直接将*.pc文件放入pkgconfig默认能搜索的目录中去。
  2. 一个环境变量PKG_CONFIG_PATH了。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。

对于Ubuntu系统,可以用root权限打开/etc/bash.bashrc文件。在最后输入下面的内容。

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/你的自定义路径/pkgconfig  
export PKG_CONFIG_PATH

参考:​

​​https://www.jianshu.com/p/e42f65ca19f2​​

​​https://blog.csdn.net/quicmous/article/details/112714641​​



举报

相关推荐

0 条评论