前言

前文关于动态库的介绍都是基于 C / C++ 编程语言直接使用 gcc 或者 makefile 进行构建的。

这里介绍一下一些其他常见构建工具对动态库的处理情况。

pkg-config

真实的 C/C++ 项目的动态库依赖是十分复杂的,在调用 gcc 或编写 makefile 时,手动指定 -L-l 是很比较麻烦的。

pkg-config 就可以解决这个问题,其通过 .pc 格式的文件能自动生成 -L-l 参数。

一般的使用流程如下:

  • 库开发者:发布库时会提供一个 .pc 文件,这个文件中包含了库的元信息(开源届主流的 C/C++ 库,如 libcurlzliblibevent 等都有)。
  • 项目开发者:使用 pkg-config --cflags --libs xxx 命令,生成 gcc 的 -L-l 参数(可以与 gcc、makefile 或 Autotools、CMake 等集成)。例如:

    gcc -o example example.c $(pkg-config --cflags --libs gtk+-3.0)
  • 项目使用者:使用包管理工具将项目发型的包、依赖的库都安装到系统中,按照上篇文章介绍的运行时查找方式来查找动态库。

主流的构建工具

真实的 C/C++ 项目,不会手动使用 gcc 或 makefile 来构建项目,而是使用一些项目管理工具/构建工具,如:

  • CMake
  • Autotools
  • Ninja
  • Meson
  • Bazel

这些项目最终也是使用 pkg-config 或者配置 -L-l 来管理动态链接库的,在此次不多赘述。