Struchkov Mark
1536a6c68c
All checks were successful
continuous-integration/drone/push Build is passing
127 lines
4.3 KiB
Markdown
127 lines
4.3 KiB
Markdown
---
|
||
aliases:
|
||
tags:
|
||
- maturity/🌱
|
||
- "#content/problem"
|
||
date: 2024-09-25
|
||
zero-link:
|
||
- "[[00 Разработка]]"
|
||
parents:
|
||
linked:
|
||
---
|
||
mozjpeg не устанавливается из обычных пакетных менеджеров для RHEL, его необходимо собирать вручную.
|
||
|
||
**Mozjpeg** использует **CMake** для сборки. Установим необходимые утилиты
|
||
```shell
|
||
sudo yum install cmake nasm make gcc git
|
||
```
|
||
|
||
Склонируем репозиторий:
|
||
```shell
|
||
git clone https://github.com/mozilla/mozjpeg.git
|
||
```
|
||
|
||
Соберем и установим **mozjpeg**
|
||
```shell
|
||
cd mozjpeg
|
||
mkdir build && cd build
|
||
cmake -G"Unix Makefiles" ..
|
||
make
|
||
sudo make install
|
||
```
|
||
|
||
|
||
> [!INFO] Путь установки
|
||
> По умолчанию **mozjpeg** устанавливается в каталог /opt/mozjpeg.
|
||
|
||
Добавим mozjpeg в PATH
|
||
```shell
|
||
export PATH=/opt/mozjpeg/bin:$PATH
|
||
```
|
||
|
||
Проверим, что все установилось успешно
|
||
```shell
|
||
cjpeg -version
|
||
```
|
||
## Проблема при установке
|
||
Во время запуска cmake я получил следующую проблему.
|
||
|
||
```shell
|
||
$ cmake -G"Unix Makefiles" ..
|
||
|
||
....
|
||
|
||
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
|
||
-- Found PNG: /usr/lib64/libpng.so (found suitable version "1.6.37", minimum required is "1.6")
|
||
-- PNG reading support enabled (PNG_SUPPORTED = 1)
|
||
-- Could NOT find ZLIB (missing: ZLIB_LIBRARY) (found version "1.2.11")
|
||
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
|
||
Could NOT find PNG (missing: PNG_LIBRARY) (Required is at least version
|
||
"1.6")
|
||
Call Stack (most recent call first):
|
||
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
|
||
/usr/share/cmake/Modules/FindPNG.cmake:159 (find_package_handle_standard_args)
|
||
CMakeLists.txt:778 (find_package)
|
||
|
||
|
||
-- Configuring incomplete, errors occurred!
|
||
```
|
||
|
||
Проблема связана с отсутствием необходимых библиотек разработки для **zlib** и **libpng**. Хотя из вывода **CMake** видно, что сначала он находит библиотеки **ZLIB** и **PNG**:
|
||
|
||
```shell
|
||
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
|
||
-- Found PNG: /usr/lib64/libpng.so (found suitable version "1.6.37", minimum required is "1.6")
|
||
```
|
||
|
||
Я попытался установить нужные пакеты, но они уже были установлены.
|
||
```shell
|
||
sudo yum install zlib-devel libpng-devel
|
||
```
|
||
|
||
Я проверил наличие библиотек и заголовочных файлов. Они также были на месте.
|
||
```shell
|
||
ls /usr/lib64/libz.*
|
||
ls /usr/lib64/libpng.*
|
||
ls /usr/include/zlib.h
|
||
ls /usr/include/png.h
|
||
```
|
||
|
||
Я попробовал установить **pkg-config**, который помогает **CMake** находить пути к библиотекам и заголовочным файлам. И проверил, что **pkg-config** возвращает пути к библиотекам.
|
||
|
||
```shell
|
||
sudo yum install pkgconfig
|
||
pkg-config --libs zlib
|
||
pkg-config --libs libpng
|
||
```
|
||
|
||
Я пытался использовать cmake3 указывая пути до библиотек
|
||
```shell
|
||
cmake3 -G"Unix Makefiles" \
|
||
-DZLIB_LIBRARIES=/usr/lib64/libz.so \
|
||
-DZLIB_INCLUDE_DIR=/usr/include \
|
||
-DPNG_LIBRARY=/usr/lib64/libpng.so \
|
||
-DPNG_PNG_INCLUDE_DIR=/usr/include \
|
||
..
|
||
```
|
||
|
||
В итоге я решил просто отключить поддержку PNG для mozjpeg, раз с ней возникают проблемы, так как я планирую использовать mozjpeg только для сжатия jpeg файлов.
|
||
|
||
```shell
|
||
cmake -G"Unix Makefiles" -DPNG_SUPPORTED=OFF ..
|
||
```
|
||
|
||
И это в итоге помогло.
|
||
***
|
||
## Мета информация
|
||
**Область**:: [[../../../meta/zero/00 Разработка|00 Разработка]]
|
||
**Родитель**::
|
||
**Источник**::
|
||
**Создана**:: [[2024-09-25]]
|
||
**Автор**::
|
||
### Дополнительные материалы
|
||
-
|
||
|
||
### Дочерние заметки
|
||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|