Skip to content

Instantly share code, notes, and snippets.

@kkotaro0111
Last active July 9, 2025 08:57
Show Gist options
  • Save kkotaro0111/ac7c25afcf7d7a8c90a0e3c03a6c0c07 to your computer and use it in GitHub Desktop.
Save kkotaro0111/ac7c25afcf7d7a8c90a0e3c03a6c0c07 to your computer and use it in GitHub Desktop.
WSL2でmozjpegをビルドする際に必要なこと

WSL2でmozjpegをビルドする際に必要なこと

概要

Mozilla JPEG Encoder Project (mozjpeg) は、libjpeg-turboをベースとした高効率なJPEG圧縮ライブラリです。本レポートは、WSL2環境でmozjpegをソースコードからビルドする際の手順と必要な依存関係について説明します。

動作環境

  • OS: Ubuntu 20.04.6 LTS (focal)
  • カーネル: 5.15.153.1-microsoft-standard-WSL2
  • アーキテクチャ: x86_64

必要な依存パッケージ

必須パッケージ

mozjpegをビルドするために以下のパッケージが必要です:

sudo apt update
sudo apt install cmake gcc nasm libpng-dev zlib1g-dev build-essential

パッケージ詳細

パッケージ バージョン 説明
cmake 3.16.3-1ubuntu1.20.04.1 クロスプラットフォーム・ビルドシステム
gcc 4:9.3.0-1ubuntu2 GNU C コンパイラ
nasm 2.14.02-1 x86アセンブラ(SIMD最適化に必要)
libpng-dev 1.6.37-2 PNG画像ライブラリ(開発用ヘッダー)
zlib1g-dev 1:1.2.11.dfsg-2ubuntu1.5 圧縮ライブラリ(開発用ヘッダー)
build-essential 12.8ubuntu1.1 ビルドツール群

補足

  • NASM: x86_64 SIMD拡張機能を使用するために必要です。mozjpegの高速化に重要な役割を果たします。
  • libpng-dev: PNG画像の読み込みサポートを有効化します。
  • zlib1g-dev: 圧縮処理に必要なライブラリです。

ビルド手順

1. ソースコードの準備

# mozjpegソースコードがすでに存在する場合
cd /path/to/mozjpeg

2. ビルドディレクトリの作成

mkdir -p build
cd build

3. CMakeによる設定

cmake -G"Unix Makefiles" -DCMAKE_C_FLAGS="-fPIC" ..

重要: -fPICフラグは共有ライブラリを正しく生成するために必要です。このフラグを指定しない場合、リンクエラーが発生します。

4. ビルド実行

make

5. インストール

make isntall
echo "export PATH=/opt/mozjpeg/bin:$PATH" >> ~/.bashrc

ビルド設定詳細

実際のビルド設定では以下の構成が使用されます:

  • ビルドタイプ: Release
  • バージョン: 5.0.0
  • アーキテクチャ: 64-bit (x86_64)
  • インストールプレフィックス: /opt/mozjpeg
  • 共有ライブラリ: 有効 (BUILD_SHARED_LIBS = 1)
  • 算術符号化: 無効 (WITH_ARITH_DEC = 0, WITH_ARITH_ENC = 0)
  • TurboJPEG API: 有効 (WITH_TURBOJPEG = 1)
  • Java ラッパー: 無効 (WITH_JAVA = 0)
  • libjpeg互換性: v6.2 API/ABI

生成される成果物

ビルドが成功すると、以下のファイルが生成されます:

実行可能ファイル

  • cjpeg: JPEG エンコーダー
  • djpeg: JPEG デコーダー
  • jpegtran: JPEG 変換ツール
  • rdjpgcom: JPEG コメント読み取りツール
  • wrjpgcom: JPEG コメント書き込みツール

ライブラリ

  • libjpeg.so.62.4.0: libjpeg互換共有ライブラリ
  • libturbojpeg.so.0.3.0: TurboJPEG API共有ライブラリ

テストツール

  • tjbench: TurboJPEG ベンチマークツール
  • tjexample: TurboJPEG サンプル
  • tjunittest: TurboJPEG ユニットテスト

トラブルシューティング

共有ライブラリのリンクエラー

エラー: relocation R_X86_64_TPOFF32 against 'simd_support' can not be used when making a shared object

解決方法: CMakeの設定時に-fPICフラグを指定する:

cmake -G"Unix Makefiles" -DCMAKE_C_FLAGS="-fPIC" ..

NASM警告

警告: warning: Unknown section attribute 'note' ignored

説明: これは.note.gnu.propertyセクションに関する警告で、機能に影響はありません。

依存関係エラー

エラー: パッケージが見つからない

解決方法: パッケージリストを更新してから再インストール:

sudo apt update
sudo apt install cmake gcc nasm libpng-dev zlib1g-dev build-essential

動作確認

ビルドが成功したら、以下のコマンドで動作確認を行います:

# バージョン確認
./cjpeg -version

# 依存関係確認
ldd ./cjpeg

期待される出力:

mozjpeg version 5.0.0 (build 20250709)

特記事項

  • mozjpegは完全にlibjpegと互換性があり、既存のアプリケーションにドロップイン置換として使用できます
  • SIMD最適化により、標準のlibjpegよりも高速な処理が可能です
  • Progressive JPEGとTrellis量子化により、より効率的な圧縮が実現されます

参考資料


作成日: 2025-01-09
対象環境: WSL2 (Ubuntu 20.04.6 LTS)
mozjpegバージョン: 5.0.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment