libjpegのビルド方法

2021年6月18日

empty hallway

はじめに

10年以上前のエントリで実はlibjpegをビルドする方法を紹介しています。

https://blog.kintarou.com/2009/08/14/libjpeg_build/

 

このときはjpegsr7.zipでのビルドでmakeファイルを手動でRenameするやり方でビルドしていました。あれから10年以上たってlibjpegのバージョンも9dへとアップしているので改めて最新のソースをビルドしていきます。

ソースコードの入手

ソースコードは公式サイトから入手します。

http://www.ijg.org/

相変わらず味も素っ気もないページです。技術屋が作ると必要最小限な情報だけあればいいって感じなんでしょうね。

ページの中程に「You can find our original code and some supporting documentation in the directory files. 」という1文があってこのfilesにファイルアーカイブへのリンクが張られています。

めんどくさい人はURL張っておきますのでここからページに飛んでもらえばいいです。

http://www.ijg.org/files/

この中から最新のソースファイルをダウンロードします。

Windowsでのビルドを行いますので、今回はjpegsr9d.zipをダウンロードします。

libjpegは他の依存Libraryがないのでソースコードの入手は以上です。

ダウンロードしてきたファイルを適当な場所に解凍して下さい。jpeg-9dというフォルダが出来ます。

この中に格納されているファイルの説明についてはfilelist.txtに記載されています。原文と粗訳を載せておきます。参考にしてください。

filelist.txt
IJG JPEG LIBRARY: FILE LIST
Copyright (C) 1994-2019, Thomas G. Lane, Guido Vollbeding.
This file is part of the Independent JPEG Group’s software.For conditions of distribution and use, see the accompanying README file.Here is a road map to the files in the IJG JPEG distribution. The distribution includes the JPEG library proper, plus two application programs (“cjpeg" and “djpeg") which use the library to convert JPEG files to and from some other popular image formats. A third application “jpegtran" uses the library to do lossless conversion between different variants of JPEG. There are also two stand-alone applications, “rdjpgcom" and “wrjpgcom".THE JPEG LIBRARY================

Include files:

jpeglib.h        JPEG library’s exported data and function declarations.

jconfig.h        Configuration declarations. Note: this file is not present in the distribution; it is generated during installation.

jmorecfg.h        Additional configuration declarations; need not be changed for a standard installation.

jerror.h        Declares JPEG library’s error and trace message codes.

jinclude.h        Central include file used by all IJG .c files to reference system include files.

jpegint.h        JPEG library’s internal data structures.

jdct.h                Private declarations for forward & reverse DCT subsystems.

jmemsys.h        Private declarations for memory management subsystem.

jversion.h        Version information.

Applications using the library should include jpeglib.h (which in turn includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included if the application needs to reference individual JPEG error codes. The other include files are intended for internal use and would not normally be included by an application program. (cjpeg/djpeg/etc do use jinclude.h, since its function is to improve portability of the whole IJG distribution. Most other applications will directly include the system include files they want, and hence won’t need jinclude.h.)

C source code files:

These files contain most of the functions intended to be called directly by an application program:

jcapimin.c        Application program interface: core routines for compression.

jcapistd.c        Application program interface: standard compression.

jdapimin.c        Application program interface: core routines for decompression.

jdapistd.c        Application program interface: standard decompression.

jcomapi.c        Application program interface routines common to compression and decompression.

jcparam.c        Compression parameter setting helper routines.

jctrans.c        API and library routines for transcoding compression.

jdtrans.c        API and library routines for transcoding decompression.

Compression side of the library:

jcinit.c        Initialization: determines which other modules to use.

jcmaster.c        Master control: setup and inter-pass sequencing logic.

jcmainct.c        Main buffer controller (preprocessor => JPEG compressor).

jcprepct.c        Preprocessor buffer controller.

jccoefct.c        Buffer controller for DCT coefficient buffer.

jccolor.c        Color space conversion.

jcsample.c        Downsampling.

jcdctmgr.c        DCT manager (DCT implementation selection & control).

jfdctint.c        Forward DCT using slow-but-accurate integer method.

jfdctfst.c        Forward DCT using faster, less accurate integer method.

jfdctflt.c        Forward DCT using floating-point arithmetic.

jchuff.c        Huffman entropy coding.

jcarith.c        Arithmetic entropy coding.

jcmarker.c        JPEG marker writing.

jdatadst.c        Data destination managers for memory and stdio output.

Decompression side of the library:

jdmaster.c        Master control: determines which other modules to use.

jdinput.c        Input controller: controls input processing modules.

jdmainct.c        Main buffer controller (JPEG decompressor => postprocessor).

jdcoefct.c        Buffer controller for DCT coefficient buffer.

jdpostct.c        Postprocessor buffer controller.

jdmarker.c        JPEG marker reading.

jdhuff.c        Huffman entropy decoding.

jdarith.c        Arithmetic entropy decoding.

jddctmgr.c        IDCT manager (IDCT implementation selection & control).

jidctint.c        Inverse DCT using slow-but-accurate integer method.

jidctfst.c        Inverse DCT using faster, less accurate integer method.

jidctflt.c        Inverse DCT using floating-point arithmetic.

jdsample.c        Upsampling.

jdcolor.c        Color space conversion.

jdmerge.c        Merged upsampling/color conversion (faster, lower quality).

jquant1.c        One-pass color quantization using a fixed-spacing colormap.

jquant2.c        Two-pass color quantization using a custom-generated colormap. Also handles one-pass quantization to an externally given map.

jdatasrc.c        Data source managers for memory and stdio input.

Support files for both compression and decompression:

jaricom.c        Tables for common use in arithmetic entropy encoding and decoding routines.

jerror.c        Standard error handling routines (application replaceable).

jmemmgr.c        System-independent (more or less) memory management code.

jutils.c        Miscellaneous utility routines.

jmemmgr.c relies on a system-dependent memory management module. The IJG distribution includes the following implementations of the system-dependent module:

jmemnobs.c        “No backing store": assumes adequate virtual memory exists.

jmemansi.c        Makes temporary files with ANSI-standard routine tmpfile().

jmemname.c        Makes temporary files with program-generated file names.

jmemdos.c        Custom implementation for MS-DOS (16-bit environment only): can use extended and expanded memory as well as temp files.

jmemmac.c        Custom implementation for Apple Macintosh.

Exactly one of the system-dependent modules should be configured into an installed JPEG library (see install.txt for hints about which one to use).

On unusual systems you may find it worthwhile to make a special system-dependent memory manager.

Non-C source code files:

jmemdosa.asm        80×86 assembly code support for jmemdos.c; used only in MS-DOS-specific configurations of the JPEG library.

CJPEG/DJPEG/JPEGTRAN

====================

Include files:

cdjpeg.h        Declarations shared by cjpeg/djpeg/jpegtran modules.

cderror.h        Additional error and trace message codes for cjpeg et al.

transupp.h        Declarations for jpegtran support routines in transupp.c.

C source code files:

cjpeg.c                Main program for cjpeg.

djpeg.c                Main program for djpeg.

jpegtran.c        Main program for jpegtran.

cdjpeg.c        Utility routines used by all three programs.

rdcolmap.c        Code to read a colormap file for djpeg’s “-map" switch.

rdswitch.c        Code to process some of cjpeg’s more complex switches. Also used by jpegtran.

transupp.c        Support code for jpegtran: lossless image manipulations.

Image file reader modules for cjpeg:

rdbmp.c                BMP file input.

rdgif.c                GIF file input.

rdppm.c                PPM/PGM file input.

rdrle.c                Utah RLE file input.

rdtarga.c        Targa file input.

Image file writer modules for djpeg:

wrbmp.c                BMP file output.

wrgif.c                GIF file output.

wrppm.c                PPM/PGM file output.

wrrle.c                Utah RLE file output.

wrtarga.c        Targa file output.

RDJPGCOM/WRJPGCOM

=================

C source code files:

rdjpgcom.c        Stand-alone rdjpgcom application.

wrjpgcom.c        Stand-alone wrjpgcom application.

These programs do not depend on the IJG library. They do use jconfig.h and jinclude.h, only to improve portability.

ADDITIONAL FILES

================

Documentation (see README for a guide to the documentation files):

README                Master documentation file.

*.txt                Other documentation files.

*.1                Documentation in Unix man page format.

change.log        Version-to-version change highlights.

example.c        Sample code for calling JPEG library.

Configuration/installation files and programs (see install.txt for more info):

configure        Unix shell script to perform automatic configuration.

configure.ac        Source file for use with Autoconf to generate configure.

ltmain.sh        Support scripts for configure (from GNU libtool).

config.guess

config.sub

depcomp

missing

ar-lib

compile

install-sh        Install shell script for those Unix systems lacking one.

Makefile.in        Makefile input for configure.

Makefile.am        Source file for use with Automake to generate Makefile.in.

ckconfig.c        Program to generate jconfig.h on non-Unix systems.

jconfig.txt        Template for making jconfig.h by hand.

mak*.*                Sample makefiles for particular systems.

jconfig.*        Sample jconfig.h for particular systems.

libjpeg.map        Script to generate shared library with versioned symbols.

libjpeg.pc.in        libjpeg.pc pkg-config file input for configure.

aclocal.m4        M4 macro definitions for use with Autoconf.

Test files (see install.txt for test procedure):

test*.*                Source and comparison files for confidence test. These are binary image files, NOT text files.

IJG JPEG LIBRARY: ファイルリスト
Copyright (C) 1994-2019, Thomas G. Lane, Guido Vollbeding.
このファイルはIndependent JPEG Groupのソフトウェアの一部です。配布と使用の条件については、付属のREADMEファイルを参照してください。ここにIJG JPEGの配布ファイルへのロードマップを示します。 この配布物には、適切なJPEGライブラリと、このライブラリを使用してJPEGファイルを他の一般的な画像フォーマットに変換する2つのアプリケーションプログラム("cjpeg “と “djpeg")が含まれています。 3番目のアプリケーションである「jpegtran」は、このライブラリを使用して、JPEGのさまざまな種類の間でロスレス変換を行います。 また、2つのスタンドアロンアプリケーション、"rdjpgcom “と “wrjpgcom “もあります。JPEG ライブラリ================

インクルードファイル

jpeglib.h JPEGライブラリのエクスポートされたデータと関数の宣言。

jconfig.h 設定宣言。 注意: このファイルはディストリビューションには存在しません。

jmorecfg.h 追加の設定宣言。標準インストールでは変更する必要はありません。

jerror.h JPEG ライブラリのエラーとトレースメッセージコードを宣言します。

jinclude.h すべてのIJG .cファイルがシステムインクルードファイルを参照するために使用する中央インクルードファイルです。

jpegint.h JPEGライブラリの内部データ構造を宣言します。

jdct.h 順方向および逆方向DCTサブシステムのプライベート宣言。

jmemsys.h メモリ管理サブシステムのプライベート宣言。

jversion.h バージョン情報。

このライブラリを使用するアプリケーションには、jpeglib.h (jconfig.h と jmorecfg.h を含む) を含める必要があります。 オプションとして、アプリケーションが個々のJPEGエラーコードを参照する必要がある場合は、jerror.hを含めることができます。 他のインクルードファイルは内部使用を目的としており、通常はアプリケーションプログラムによってインクルードされることはありません。 (cjpeg/djpeg/etcはjinclude.hを使用していますが、その機能はIJGディストリビューション全体の移植性を向上させることです。他のほとんどのアプリケーションは必要なシステムインクルードファイルを直接インクルードしますので、jinclude.hは必要ありません。)

Cのソースコードファイル。

これらのファイルには、アプリケーションプログラムから直接呼び出されることを意図した関数のほとんどが含まれています。

jcapimin.c アプリケーションプログラムのインターフェイス: 圧縮のためのコアルーチン。

jcapistd.c アプリケーションプログラムインタフェース: 標準圧縮。

jdapimin.c アプリケーションプログラムインタフェース: 解凍用コアルーチン jdapistd.c アプリケーションプログラムインタフェース: 解凍用コアルーチン jdapistd.c アプリケーションプログラムインタフェース: 標準圧縮

jdapistd.c アプリケーションプログラムインタフェース: 標準伸長。

jcomapi.c 圧縮と伸長に共通のアプリケーションプログラムインタフェースルーチン。

jcparam.c 圧縮パラメータ設定ヘルパールーチン

jctrans.c トランスコーディング圧縮のための API およびライブラリルーチン。

jdtrans.c トランスコーディング解凍用のAPIおよびライブラリルーチン。

ライブラリの圧縮側。

jcinit.c 初期化:他のどのモジュールを使用するかを決定します。

jcmaster.c マスター制御:セットアップとパス間シーケンシングロジック。

jcmainct.c メインバッファコントローラ(プリプロセッサ⇒JPEG圧縮機)。

jcprepct.c プリプロセッサバッファコントローラ。

jccoefct.c DCT係数バッファ用バッファコントローラ。

jccolor.c 色空間変換

jcsample.c ダウンサンプリング。

jcdctmgr.c DCTマネージャ(DCT実装の選択と制御)

jfdctint.c 遅いが正確な整数法を用いたDCTのフォワード。

jfdctfst.c より高速で精度の低い整数法を用いたDCTのフォワード。

jfdctflt.c 浮動小数点演算を用いたフォワードDCT。

jchuff.c ハフマン・エントロピー符号化法.

jcarith.c 算術エントロピー符号化法.

jcmarker.c JPEGマーカ書込み.

jdatadst.c メモリとstdio出力用のデータデスティネーションマネージャ

ライブラリの展開側。

jdmaster.c マスター制御: 他のどのモジュールを使用するかを決定します。

jdinput.c 入力コントローラ:入力処理モジュールを制御します。

jdmainct.c メインバッファコントローラ(JPEG解凍器⇒後処理器)。

jdcoefct.c DCT係数バッファのバッファコントローラ。

jdpostct.c ポストプロセッサバッファコントローラ。

jdmarker.c JPEGマーカ読み込み

jdhuff.c ハフマンエントロピーデコーディング。

jdarith.c 算術エントロピー復号化。

jddctmgr.c IDCTマネージャ(IDCT実装の選択と制御).

jidctint.c 遅いが正確な整数法を用いた逆DCT.

jidctfst.c より高速で精度の低い整数法を用いた逆DCT.

jidctflt.c 浮動小数点演算を用いた逆DCT.

jdsample.c アップサンプリング.

jdcolor.c 色空間変換

jdmerge.c アップサンプリングと色変換をマージしました(高速で低品質).

jquant1.c 固定間隔カラーマップを用いたワンパス色量子化

jquant2.c カスタム生成されたカラーマップを使用した2パスのカラー量子化。外部から与えられたマップへのワンパス量子化も扱う。

jdatasrc.c メモリと標準入力用のデータソースマネージャ。

圧縮と伸長の両方のファイルをサポート。

jaricom.c 算術エントロピー符号化および復号化ルーチンで一般的に使用されるテーブル

jerror.c 標準的なエラー処理ルーチン (アプリケーションで置き換え可能)

jmemmgr.c システムに依存しない (多かれ少なかれ) メモリ管理コード。

jutils.c その他のユーティリティルーチン

jmemmgr.c はシステム依存のメモリ管理モジュールに依存しています。 IJG配布物には、システム依存モジュールの以下の実装が含まれています。

jmemnobs.c “No backing store": 適切な仮想メモリが存在すると仮定します。

jmemansi.c ANSI標準のルーチンtmpfile()でテンポラリファイルを作成します。

jmemname.c プログラムが生成したファイル名でテンポラリファイルを作成します。

jmemdos.c MS-DOS (16ビット環境のみ) 用のカスタム実装: 一時ファイルと同様に拡張・拡張メモリを使用することができます。

jmemmac.c Apple Macintosh用のカスタム実装。

システムに依存するモジュールのうちの一つを、インストールされている JPEG ライブラリに設定する必要があります (どのモジュールを使うべきかについてのヒントは install.txt を参照)。

特殊なシステムでは、システムに依存した特別なメモリマネージャを作成する価値があるかもしれません。

非C言語のソースコードファイル。

jmemdosa.asm jmemdos.c の 80×86 アセンブリコードサポート。

CJPEG/DJPEG/JPEGTRAN

====================

インクルードファイル。

cdjpeg.h cjpeg/djpeg/jpegtran モジュールで共有される宣言。

cderror.h cjpeg などの追加のエラーおよびトレースメッセージコード。

transupp.h transupp.c の jpegtran サポートルーチンの宣言。

C ソースコードファイル。

cjpeg.c cjpeg のメインプログラム。

djpeg.c djpeg のメインプログラム。

jpegtran.c jpegtran のメインプログラム。

cdjpeg.c 3 つのプログラムで使用されるユーティリティルーチン。

rdcolmap.c djpeg の “-map" スイッチ用のカラーマップファイルを読み込むコード。

rdswitch.c cjpeg のより複雑なスイッチを処理するコード。jpegtran でも使われています。

transupp.c jpegtran のサポートコード: ロスレス画像操作。

cjpeg 用の画像ファイルリーダモジュール。

rdbmp.c BMP ファイルの入力。

rdgif.c GIF ファイルの入力

rdppm.c PPM/PGM ファイルの入力

rdrle.c Utah RLE ファイルの入力.

rdtarga.c Targa ファイル入力.

djpeg 用画像ファイルライタモジュール

wrbmp.c BMPファイル出力

wrgif.c GIFファイル出力

wrppm.c PPM/PGMファイル出力

wrrle.c ユタRLEファイル出力

wrtarga.c タルガファイル出力。

RDJPGCOM/WRJPGCOM

=================

C のソースコードファイル。

rdjpgcom.c スタンドアロンの rdjpgcom アプリケーション。

wrjpgcom.c スタンドアロンの wrjpgcom アプリケーション。

これらのプログラムはIJGライブラリに依存していません。 jconfig.h と jinclude.h を使用していますが、移植性を高めるためだけに使用しています。

追加ファイル

================

ドキュメント (ドキュメントファイルのガイドについては README を参照してください)。

README マスター・ドキュメント・ファイル。

*.txt その他のドキュメントファイル。

*.1 Unix man ページ形式のドキュメント。

change.log バージョン間の変更のハイライト。

example.c JPEG ライブラリを呼び出すためのサンプルコード。

設定/インストールファイルとプログラム (詳細は install.txt を参照)。

configure 自動設定を実行するための Unix シェルスクリプト。

configure.ac Autoconf で configure を生成するためのソースファイル。

ltmain.sh configure のサポートスクリプト (GNU libtool から)。

config.guess

コンフィグサブ

デップコンプ

欠落

アールリブ

コンパイル

install-sh シェルスクリプトがない Unix システムにシェルスクリプトをインストールします。

Makefile.in configure 用の Makefile 入力。

Makefile.am Automake で Makefile.in を生成するためのソースファイル。

ckconfig.c Unix 以外のシステムで jconfig.h を生成するためのプログラム。

jconfig.txt jconfig.hを自作するためのテンプレート。

mak*.* 特定のシステム用のmakefileのサンプル。

jconfig.* 特定のシステム用のjconfig.hのサンプル。

libjpeg.map バージョン分けされたシンボルを持つ共有ライブラリを生成するスクリプト。

libjpeg.pc.in libjpeg.pc configure用のpkg-configファイルの入力。

aclocal.m4 Autoconf で使用するための M4 マクロ定義。

テストファイル(テスト手順はinstall.txtを参照)。

test*.* 信頼性テスト用のソースファイルと比較ファイル。これらはテキストファイルではなく、バイナリイメージファイルです。

ビルドの準備

ビルドについての説明はinstall.txtに記載されています。中を読むと様々な環境で使用できることがわかります。いまだにMS-DOS16bitのコンパイルもサポートしているんですね。

今回はWindows Visual Studio 2019で使用することを前提でビルドしますので「Microsoft Windows, Visual Studio 2019 (v16):」の項目を読んでください。

install.txt(抜粋)
Microsoft Windows, Visual Studio 2019 (v16):
We include makefiles that should work as project files in Visual Studio 2019 (v16) or later. There is a library makefile that builds the IJG library as a static Win32/x64 library, and application makefiles that build the sample applications as Win32/x64 console applications. (Even if you only want the library, we recommend building the applications so that you can run the self-test.)
To use:To use:1. Open the Developer Command Prompt for VS 2019, change to the source directory and execute the command line

NMAKE /f makefile.vs setup-v16

This will move jconfig.vc to jconfig.h and makefiles to project files. (Note that the renaming is critical!)

Alternatively you can use

NMAKE /f makefile.vs setupcopy-v16

This will create renamed copies of the files, which allows to repeat the setup later.

2. Open the solution file jpeg.sln, build the library project.

a) If you are using Visual Studio more recent than 2019 (v16), you’ll probably get a message saying that the project files are being updated.

b) If necessary, open the project properties and adapt the Windows Target Platform Version in the Configuration Properties, General section; we support the latest version at the time of release.

c) If you want to build x64 code, change the platform setting from Win32 to x64. You can build Win32 and x64 versions side by side.

3. Open the solution file apps.sln, build the application projects.

4. To perform the self-test, execute the command line

NMAKE /f makefile.vs test-32

for the Win32 build, or on a 64-bit system

NMAKE /f makefile.vs test-64

for the x64 build.

5. Move the application .exe files from the Release folder to an appropriate location on your path.

 

Microsoft Windows、Visual Studio 2019 (v16)
Visual Studio 2019 (v16) 以降でプロジェクトファイルとして動作するはずの makefile をインクルードします。 IJGライブラリを静的なWin32/x64ライブラリとしてビルドするライブラリmakefileと、サンプルアプリケーションをWin32/x64コンソールアプリケーションとしてビルドするアプリケーションmakefileがあります。 (ライブラリだけが欲しい場合でも、セルフテストができるようにアプリケーションをビルドすることをお勧めします)
使用方法は以下の通りです。1. VS 2019 の開発者コマンド プロンプトを開き、ソース ディレクトリに変更してコマンド ラインを実行します。

NMAKE /f makefile.vs setup-v16

これにより、jconfig.vc は jconfig.h に、makefiles はプロジェクトファイルに移動します。(名前の変更は重要であることに注意してください!)

別の方法としては

NMAKE /f makefile.vs setupcopy-v16

これは、後でセットアップを繰り返すことができますファイルのリネームされたコピーを作成します。

2. ソリューションファイルjpeg.slnを開き、ライブラリプロジェクトをビルドします。

a) Visual Studioを2019 (v16)よりも最近のものを使用している場合は、おそらくプロジェクトファイルが更新されているというメッセージが表示されます。

b) 必要に応じて、プロジェクトのプロパティを開き、構成プロパティ、一般セクションのWindowsターゲットプラットフォームバージョンを適応させます; リリース時の最新バージョンをサポートしています。

c) x64コードをビルドする場合は、プラットフォームの設定をWin32からx64に変更します。 Win32版とx64版を並べてビルドすることができます。

3. ソリューションファイルapps.slnを開き、アプリケーションプロジェクトをビルドします。

4. 4. セルフテストを実行するには、コマンドラインを実行します。

NMAKE /f makefile.vs test-32

Win32 ビルドの場合は、64 ビットシステムの場合は

NMAKE /f makefile.vs test-64

x64 ビルドの場合。

5. アプリケーションの .exe ファイルを Release フォルダからパス上の適切な場所に移動します。

ライブラリを作成するという目的であれば2.まで行えばいいわけですが一通りやってみることにしましょう。

Visual Studio 2019用のプロジェクトファイルの生成

1.Visual Studio 2019の開発者コマンドプロンプトを起動する。

スタートメニューから「Visual Studio 2019」のフォルダアイコンを探して▽を押す。

中に「Developer Command Promt for vs…」があるのでクリックする。

2.カレントディレクトリを「jpeg-9d」フォルダに切り替える。

3.makefailesはバックアップとして残しておくため「NMAKE /f makefile.vs setupcopy-v16」を実行する。

「jpeg-9d」フォルダ内にソリューションファイル、プロジェクトファイル、jconfig.hファイルが生成されているのが確認できる。

4.Visual Sutudio 2019を起動してjpeg.sinを読み込む。

デバッグビルド用の設定

提供されているプロジェクトにはDebugビルド用の設定がないので必要であればDebug用設定を作成する。

1.メニュー「ビルド」から構成マネージャーを選択する。

2.構成マネージャーダイアログボックスが起動する。

3.プロジェクトのコンテキストにある「構成」のプルダウンリストから「<新規作成…>」を選択する。

4.新しいプロジェクト構成ダイアログボックスが起動する。

5.名前に「Debug」と入力し、設定のコピー元のプルダウンリストから「Relese」を選択、「新しいソリューションを構成する」にチェックが入っていることを確認してOKボタンを押す。

6.アクティブソリューションプラットフォームを「Win32」、「x64」を切り替えて構成にDebugがあることを確認する。

7.OKボタンを押して構成マネージャーダイアログボックスを閉じる。

8.メニュー「プロジェクト」からプロパティを選択する。

9.jpegのプロパティページダイアログボックスが起動する。

10.構成のプルダウンメニューから「Debug」に変更し、プラットフォームは「すべてのプラットフォーム」になっていることを確認して以下の設定を変更する。

  • 「構成プロパティ:詳細」→「ターゲット名」を「$(ProjectName)d」必須ではないがライブラリファイルがデバッグ版であることが容易にわかる。
  • 「構成プロパティ:詳細」→「デバックライブラリの使用」を「はい」
  • 「構成プロパティ:詳細」→「プログラム全体の最適化」を「プログラム全体の最適化なし」
  • 「C/C++:全般」→「デバッグ情報の形式」を「エディットコンティニュ用プログラムデータベース(/ZI)」
  • 「C/C++:全般」→「[マイコードのみ]のデバックをサポート」を「はい(/JMC)」
  • 「C/C++:最適化」→「最適化」を「無効(/Od)」
  • 「C/C++:最適化」→「組み込み関数を使用する」を「いいえ」
  • 「C/C++:最適化」→「プログラム全体の最適化」を「いいえ」
  • 「C/C++:コード生成」→「基本ランタイムチェック」を「両方(/RTC1,/RTCsuと同等)」
  • 「C/C++:コード生成」→「ランタイムライブラリ」を「マルチスレッドデバッグDLL(/MDd)
  • 「C/C++:コード生成」→「関数レベルでリンクする」を「」(空白)

11.構成は「Debug」のまま、プラットフォームのプルダウンメニューから「Win32」、「x64」それぞれ切り替えて以下の設定を変更する。

  • 「C/C++:プリプロセッサ」→「プリプロセッサの定義」の中にある「NDEBUG」を「_DEBUG」

ビルドの実行

1.メニュー「ビルド」からバッチビルドを選択する。

2.バッチビルドダイアログボックスが起動したら、「すべてを選択」ボタンをクリックする。

3.ビルド列のすべてのチェックボックスにチェックがついていることを確認してビルドボタンを押す。

4.ビルドが開始され出力ウインドウにビルドの状況が表示される。

5.すべてのビルドが終了して、「========== ビルド: 4 正常終了、0 失敗、0 更新不要、0 スキップ ==========」と表示されればライブラリのビルドは終了である。

6.「jpeg-9d」フォルダの中に「Debug」と「Relese」の2つのフォルダが出来ていてその中にそれぞれ「Win32」と「x64」の二つのフォルダが格納されてて、その中にデバッグ版は「jpegd.lib」、リリース版は「jpeg.lib」というファイルが生成されている。

アプリケーションプロジェクトのビルド

1.Visual Sutudio 2019を起動してapps.slnを読み込む。

アプリケーションプロジェクトもライブラリと同じくDebugビルド用の設定が準備されていないが、特に必要がなければReleseビルドだけ行えばよい。Debug版アプリケーションが必要な場合はライブラリと同じようにDebugビルド用の設定を作成すればよい。

2.メニュー「ビルド」から「バッチビルド」を選択してバッチビルドダイアログボックスを開く。

3.「すべて選択」ボタンをしてビルド列のチェックボックスにすべてチェックが入っていることを確認して「ビルド」ボタンをクリックする。

4.ビルドが開始され出力ウインドウにビルド状況が出力される。「========== ビルド: 10 正常終了、0 失敗、0 更新不要、0 スキップ ==========」と表示されればビルドは終了である。

5.「Relese」フォルダ内の「Win32」、「x64」フォルダ内にビルドされたexeファイルが格納されている。

セルフチェックを実行する

1.Visual Studio 2019の開発者コマンドプロンプトを起動し、カレントディレクトリを「jpeg-9d」フォルダに変更する。

2.「NMAKE /f makefile.vs test-32」を実行する。

3.続けてNMAKE /f makefile.vs test-64実行する。

4.32ビット版、64ビット版双方とも出力に問題がなければセルフチェックは終了である。

終わりに

最近はOpenCVなどの高級ライブラリの中に内包されてしまって単独で低級レベルのライブラリを扱うことが少なくなりましたが、画像をエンジニアであれば一度は自分で低級レベルのライブラリをビルドして使ってみるとよいと思います。PNG、TIFF、JPEG2000、JPEGXR、CameraRAW等のライブラリもオープンソースで準備されていますので興味のなる人は是非使用してみてください。