libjpegをVS2017でビルドする

【2020/07/19 追記 ここから】
「libjpeg visualstudio」などの検索で辿り着く方が多いようなので追記します.

以下の手順はあくまで当時の自分がとりあえずビルドできないのを回避した際のメモなので,正しい手順でない可能性があります.まずは本家のドキュメントを参照するようにしてください(...といっても英語かつファイルの配置がわかりにくいので読むのをあきらめたくなりますが...)

libjpegのダウンロード

http://www.ijg.org/にアクセスすると殺風景なホームページが出てきて一瞬引きますが,めげずに英語を読みましょう.

2段落目(The current version is ~)の日付を見れば一応2020年にも更新されていることがわかります.

3段落目(You can find our original code and ~)を見ればソースとドキュメントはここにあるで~・Windows向けのzipはこれやで~っていうのが書いてありますので,それに従ってダウンロードしましょう.

ドキュメントを探し出す

zipを展開すると,圧倒的量のファイルが全部同じディレクトリにぶちまけられてこれまた引いてしまいますが,この中からfilelist.txtとinstall.txtを探し出しましょう.

filelist.txtにはファイル一覧,install.txtにはビルド方法などが書いてあります.

install.txtも読むのが大変ですが,読みましょう.

とはいえものぐさな方は,最低限
Microsoft Windows, Visual Studio 2019 (v16):
の項を読めばいいと思います(jpegsr9d.zipの場合).

...結論から言えば,
NMAKE /f makefile.vs setup-v16
を実行してから,あとはVisualStudioのGUIなりでビルドすることになりますが,下記の理由で失敗する場合があるようです(※現在失敗するかは未検証です!)

makefile.vsを紐解けば,180行目付近にsetup-v16のレシピの記述があり(jpegsr9d.zipの場合),以下でやっているようなren(ファイル名変更コマンド)の羅列が出てきます(レシピの内容はバージョンごとに異なるのであくまで本ブログのrenコマンドをコピペするのではなくmakefile.vsからコピペしてくる方を勧めます).

被引用サイト様の紹介

以下のサイトで引用いただきました,ありがとうございます.

mame-mame.hatenadiary.com

【2020/07/19 追記ここまで】

 


 

 

libjpeg(http://www.ijg.org/ 、新ページ: http://www.infai.org/jpeg/ )を VisualStudio2017でビルドした話。

 

この記事は 上記「libjpegをビルドする」(libjpegをVS2010でビルドした記事)を参考にした。なお、当時と異なる部分は太字で書いている。

 


 

libjpegは、JPEGエンコード、デコードを行うためのライブラリである。

 

libjpeg - Wikipedia

 

まず、infai(http://www.infai.org/jpeg/)からjpegsr9b.zipをダウンロード・展開する。

ここで、install.txtの終わり近く、1044行目に

Microsoft Windows, Microsoft Visual C++ 2010 Developer Studio (v10):

という項があり、VC2010でのコンパイル方法について説明されている

しかし、VC2012以降では win32.mak なるものが削除されたらしく(cf. https://support.microsoft.com/ja-jp/help/2791460)、説明通りに

NMAKE /f makefile.vc  setup-v10

を実行することはできない。

そこで、makefile.vcをテキストエディタで開き、158-172行目の

ren jconfig.vc jconfig.h
ren makejsln.v10 jpeg.sln
ren makeasln.v10 apps.sln
ren makejvcx.v10 jpeg.vcxproj
ren makejfil.v10 jpeg.vcxproj.filters
ren makecvcx.v10 cjpeg.vcxproj
ren makecfil.v10 cjpeg.vcxproj.filters
ren makedvcx.v10 djpeg.vcxproj
ren makedfil.v10 djpeg.vcxproj.filters
ren maketvcx.v10 jpegtran.vcxproj
ren maketfil.v10 jpegtran.vcxproj.filters
ren makervcx.v10 rdjpgcom.vcxproj
ren makerfil.v10 rdjpgcom.vcxproj.filters
ren makewvcx.v10 wrjpgcom.vcxproj
ren makewfil.v10 wrjpgcom.vcxproj.filters

を手動で実行する。実行するには、zipを展開したディレクトリでコマンドプロンプトを開き、この15行のren(rename)コマンドをコピペする。

(ここが、引用元ブログの以下の部分に相当する:

VS2008でビルドするので展開したファイルの中からmakexxxx.vc9となっているファイルを集める。

集めたファイルを次のようにリネームする。

makejsln.vc9 → libjpeg.sln  libjpeg本体のソリューションファイル
makejvcp.vc9 → jpeg.vcproj  libjpeg本体のプロジェクトファイル

makeasln.vc9 → jpegutl.sln  jpegファイルを操作するユーティリティプログラムのソリューションファイル
makecvcp.vc9 → cjpeg.vcproj  cjpegのプロジェクトファイル
makedvcp.vc9 → djpeg.vcproj  djpegのプロジェクトファイル
makervcp.vc9 → jpegtram.vcproj  jpegtramのプロジェクトファイル
maketvcp.vc9 → rdjpgcom.vcproj  rdjpgcomのプロジェクトファイル
makewvcp.vc9 → wrjpgcom.vcproj  wrjpgcomのプロジェクトファイル

次にjconfig.vcをjconfig.hとリネームする。

)

以上の作業が終了後、VS2017からlibjpeg.slnを読み込み、ビルドする。特にエラーは出ずにビルドは完了し、Releaseフォルダにjpeg.libができる。

次にapps.sln(旧jpegutl.sln)を読み込み、ビルドをすると、cjpeg、djpeg、jpegtram、rdjpgcom、wrjpgcomの5つのユーティリティプログラムが作成される。

 

以降は引用元ブログとほぼ同じであり、ReleaseビルドとDebugビルドのjpeg.lib、それにReleaseビルドの5つのユーティリティプログラムが得られる。

なお、一箇所、

C/C++:コード生成」→「簡易ビルドを行う」を「はい(/Gm)」

とあるが、ここは「最小リビルドを有効にする」に名称が変更されているので注意(「はい(/Gm)」はそのままでよい)。