add pkg-config

main
tink 11 months ago
parent 335e307ddc
commit 7433359247

@ -0,0 +1,121 @@
# pkg-config
`pkg-config` 是一个帮助开发人员在编译和链接程序时发现和使用库的辅助工具。它提供了一种方法来获取库的编译和链接参数,使得在编译时链接库变得更加容易和一致。`pkg-config` 通常用于Unix-like系统并且支持多种编程语言。
`pkg-config` 的工作原理是查询一个名为`.pc`的文件,这些文件包含了关于库的元数据,例如库的安装位置、编译器标志、链接器标志等。当你安装一个库时,通常会在`/usr/lib/pkgconfig`或`/usr/share/pkgconfig`目录下安装相应的`.pc`文件。
## 如何使用 `pkg-config`
### 查询库的编译和链接标志
使用`pkg-config`查询库的编译和链接标志是最常见的用途。例如,如果你想使用`libopus`库,你可以使用以下命令来获取编译和链接标志:
```bash
pkg-config --cflags --libs opus
```
这个命令会输出类似以下内容:
```bash
-I/usr/include/opus -lopus
```
这些标志可以直接在编译命令中使用。
### 编译程序
当你编译程序时,可以将`pkg-config`的输出直接嵌入到编译命令中。例如:
```bash
gcc `pkg-config --cflags --libs opus` -o myprogram myprogram.c
```
这个命令会编译一个名为`myprogram`的程序,并且链接`libopus`库。
如果使用`Makefile`时候,可以通过`pkg-config`动态获取参数:
```makefile
CC = gcc
PKG_CONFIG = pkg-config
CFLAGS = $(shell $(PKG_CONFIG) --cflags opus)
LDFLAGS = $(shell $(PKG_CONFIG) --libs opus)
all: main
main: main.c
$(CC) main.c $(CFLAGS) $(LDFLAGS) -o main
```
另外进行Go语言的CGO编程时候我们可以使用 `#cgo` 指令结合 `pkg-config`,来获取链接参数:
```go
/*
#cgo pkg-config: opus
#include <opus/opus.h>
*/
import "C"
```
### 安装和使用.pc文件
如果你正在开发一个库,并且想要让其他程序能够使用`pkg-config`来链接你的库,你需要创建一个`.pc`文件。这个文件通常包含以下内容:
```ini
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: YourLibrary
Description: A description of your library
Version: 1.0.0
Libs: -L${libdir} -lyourlib
Cflags: -I${includedir}
```
然后,你可以将这个文件安装到`/usr/lib/pkgconfig`或`/usr/share/pkgconfig`目录下。
下面是`libopus`的`.pc`文件内容:
```ini
# Opus codec reference implementation pkg-config file
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include
Name: Opus
Description: Opus IETF audio codec (floating-point build)
URL: https://opus-codec.org/
Version: 1.3.1
Requires:
Conflicts:
Libs: -L${libdir} -lopus
Libs.private: -lm
Cflags: -I${includedir}/opus
```
### 设置环境变量
在Linux系统中`.pc`文件的标准位置通常是以下几个目录之一:
1. `/usr/lib/pkgconfig`:这是系统默认的库文件搜索路径之一,通常用于存放系统级库的`.pc`文件 。
2. `/usr/share/pkgconfig`:这是另一个系统默认的库文件搜索路径,同样用于存放库的`.pc`文件。
3. `/usr/local/lib/pkgconfig`:当库被安装在`/usr/local`目录下时,相应的`.pc`文件也会存放在这个路径下 。
4. `/usr/lib/x86_64-linux-gnu/pkgconfig`在某些系统上特别是64位系统`.pc`文件可能会存放在这个路径下 。
如果你的`.pc`文件不在标准位置,你可以通过设置`PKG_CONFIG_PATH`这个环境变量来告诉`pkg-config`在哪里查找它们。
```bash
export PKG_CONFIG_PATH=/path/to/your/pkgconfig/files:$PKG_CONFIG_PATH
```
`pkg-config` 是一个非常有用的工具,它可以帮助自动化处理库的发现和使用,使得构建系统更加简洁和易于维护。
### 其他用法
```bash
pkg-config --modversion opus # 查询库版本号
pkg-config --list-all # 查询所有库
```

@ -246,6 +246,7 @@ nav:
- GDB: cheatsheet/gdb.md - GDB: cheatsheet/gdb.md
- CMake: cheatsheet/cmake.md - CMake: cheatsheet/cmake.md
- Katex: cheatsheet/KaTex常用公式编辑.ipynb - Katex: cheatsheet/KaTex常用公式编辑.ipynb
- "PKG-CONFIG": cheatsheet/pkg-config.md
- QA: - QA:
- redis: qa/redis.md - redis: qa/redis.md
- mysql: qa/mysql.md - mysql: qa/mysql.md

Loading…
Cancel
Save