Это библиотека/компоненты для работы векторными шрифтами вроде FontAwesome и преобразованием их без потери качества в TImage и TImageList. Однако при компиляции пакета получаем ошибку «Can’t load package IconFontsImageList$(Auto).bpl». Установка библиотеки IconFontsImageList не получается.
Используется Delphi 10.4, библиотека скачана с гитхаба, самый свежий релиз 3.3.3 от 15 сентября 2024 года. Особых инструкций по установке нет, всё стандартно, компилируем real-time, install — design time. В проекте 4 пакета, для VCL и FMX соответственно. Пути настроены, но библиотека упорно не собирается.
Почему не собирается библиотека?
Окей, берём утилиту Process Monitor (Sysinternals), настраиваем фильтр вот так:
Нажимаем кнопку «Add», закрываем окно кнопкой «Ок», а затем кнопку «Capture» (Ctrl+E) на панели инструментов. После этого переключаемся на IDE Delphi и пытаемся сделать build для библиотеки. Получаем ошибку, переключаемся в Process Monitor, останавливаем процесс сбора данных (Ctrl+E) и смотрим результат в самом низу (свежие события добавляются в конец списка):
Видим, что IDE Delphi пытается создать файл с названием «IconFontsImageList$(Auto).bpl», здесь явно что-то не то, потому что по этому пути такого файла нет, но зато есть «IconFontsImageList270.bpl».
Что это за $(Auto) в названии BPL-файла библиотеки?
Начиная с Delphi 10.4 компания Embarcadero добавила переменную окружения $(Auto), которая используется для версионирования сборок библиотек. Вдруг у вас на компьютере несколько версий Delphi, а значит, несколько версий одних и тех же библиотек. Обычно собранные версии лежат в одной папке по умолчанию.
Идея в том, чтобы вместо этой переменной поставлять номер версии компилятора в название пакета в качестве суффикса. Чтобы они не конфликтовали друг с другом. Например:
«270» для Delphi 10.4
«280» для Delphi 11
Красиво, но в Delphi 10.4 есть какой-то баг, и это не работает 🙂
Как исправить проблему и собрать библиотеку IconFontsImageList?
- Закройте файл группы проекта («File», «Close All»).
- Отредактируйте все *.dpk файлы в папке \Packages\D10_4\ и закомментируйте строку {{$LIBSUFFIX AUTO} (просто поставьте фигурную скобку { в начале строки).
- Отредактируйте все *.dproj файлы в папке \Packages\D10_4\ и удалите оттуда строку <DllSuffix>$(Auto)</DllSuffix>
- Теперь откройте в Delphi «File», «Open Project» (Ctrl+F11) файл проекта \Packages\D10_4\IconFontsImageGroupPackages.groupproj и сделайте сначала build а затем install для design-time библиотек VCL и FMX.
После этих «танцев с бубном» библиотека соберётся, компоненты установятся и пример заработает: