Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
pkg-config
Контекст pkg-config — утилита, которая отдаёт сборочной системе флаги компиляции и линковки для установленных библиотек на основе их
*.pc‑файлов. Сама библиотека публикует свой метаданный файл (например,/usr/lib/pkgconfig/openssl.pc), где указаны версия, пути и зависимости. Для SCA это один из немногих мест в C/C++, где у системной библиотеки есть задекларированная версия на этапе конфигурации сборки.
Для чего
pkg-config отвечает на вопрос «какие -I, -L, -l нужны, чтобы собрать против библиотеки X, и какой она версии». Он читает *.pc‑файлы из путей PKG_CONFIG_PATH, разрешает транзитивные Requires: и выдаёт согласованный набор флагов. В инвентаризации он полезен как источник задекларированной версии и графа межбиблиотечных зависимостей до сборки.
Как применяют
Получить версию и флаги библиотеки:
pkg-config --modversion openssl # → 3.2.1
pkg-config --cflags --libs openssl # → -I/usr/include -lssl -lcrypto
pkg-config --print-requires gtk+-3.0 # транзитивные Requires
Пример *.pc‑файла, который читает утилита:
# /usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc
Name: OpenSSL
Version: 3.2.1
Requires.private: libssl libcrypto
Libs: -L${libdir} -lssl -lcrypto
Version: и Requires отсюда дают версию и связи компонента ещё до того, как соберётся бинарь.
Сильные стороны
- Даёт задекларированную версию системной библиотеки (
--modversion) — то, чего нет ни в CMakefind_package, ни в-lsslиз Makefile. - Разрешает транзитивные
Requires:/Requires.private:— виден маленький граф зависимостей между системными библиотеками. - Универсален и встроен в большинство autotools/CMake/Meson‑проектов; данные читаются скриптом без сборки.
Ограничения
- Версия из
*.pc— это версия установленного dev‑пакета, а не гарантия того, что слинкуется именно она (на проде может оказаться другая.so). - Покрывает только библиотеки, поставившие
*.pc. Многие библиотеки и весь vendored‑код их не публикуют. - Не различает статику и динамику по факту:
Libs/Libs.privateописывают намерение, а реальная модель линковки видна лишь в артефакте.
Offline / on-premise
Да. pkg-config полностью локален: читает *.pc‑файлы из файловой системы и ничего не скачивает. Работает в любом закрытом контуре, где установлены dev‑пакеты библиотек; сетевого доступа не требует.
Связанные темы
М09 C/C++ legacy · П19. C C++ make build inventory · П22. ELF dynamic dependencies · П24. PURL нормализация и private qualifiers · CMake · qmake · ldd readelf LIEF