libGDのインストール

画像を動的に操作するライブラリーであるlibGDをソースコードからインストールする。

インストール情報
項目 説明
配布元 GD Graphics Library
手順
依存情報
依存先 (必須) Make (GNU Make)
依存先 (任意)
  • CMake: CMakeでのビルド時。
  • zlib: データ圧縮。 
  • FreeType 2.x: 高品質なフォント描画用。
  • IJG/libjpeg or libjpeg-turbo: JPEG画像対応。
  • libpng: PNG画像対応。
  • libtiff: TIFF画像対応。
  • libwebp: WebP画像対応。
  • libXpm (XPM): XPM画像対応。
依存元 PHP拡張機能
インストール手順
sh -eux <<-"EOT"
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2) PKG=libgd VER=2.2.5 TAG=gd-$VER mkdir -p "$LOCAL/src"
cd "$LOCAL/src" if command -v git >/dev/null; then [ -e $PKG ] || git clone --depth 1 https://github.com/libgd/libgd $PKG cd $PKG git fetch --depth 1 origin tag $TAG git checkout -f $TAG
autoreconf -i
else [ -e $PKG-$VER ] || wget https://github.com/libgd/libgd/releases/download/gd-$VER/$PKG-$VER.tar.xz tar -xf $PKG-$VER.* cd $PKG-$VER fi

make -kj $J distclean clean || :
# cmake -DCMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER" .
./configure --prefix="$LOCAL/stow/$PKG-$VER"
make -j $J CFLAGS="-g -O2"
make -j $J check
make -j $J install

cd "$LOCAL/stow" for pkg in $PKG-[0-9]*; do stow --ignore=dir -D $pkg; done stow --ignore=dir $PKG-$VER
EOT
インストール例
日付 バージョン OS 依存関係
2018-04-30 2.2.5 Ubuntu 16.04 GNU Make 4.2.1, GCC 8.1.0, libPNG 1.6.16, libJPEG 9c
2019-03-03 2.2.5 Ubuntu 18.04 GNU Make 4.2.1, GCC 7.4.0, Zlib 1.2.11, libPNG 1.6.16, libJPEG 9c

libGDはAutoconfツールとCMakeの2通りのビルド方法がある。

CMakeの場合,cmake実行時にENABLE_PNG=1などを指定して,明示的にオプションライブラリーを指定する必要がある。その一方,Autoconf (configure) の場合,ビルドマシンの状況に応じて自動的に追加機能を有効にするか判定してくれる。そのため,Autoconfを選んだ。

CMakeでビルドする場合,autoreconfと./configureの2行を無視して,コメントアウトしているmkdir buildとcmakeの2行のコマンドを実行すればよい。

なお,Autoconfでビルドする場合,GCC 7 or 8を使っているとmake実行時に以下のエラーが発生する。

Autoconfでのmake実行時のエラー
In function ‘font_path’,
    inlined from ‘fontFetch’ at gdft.c:487:12:
gdft.c:1699:2: error: ‘strncpy’ output truncated before terminating nul copying g  many bytes from a string as its length [-Werror=stringop-truncation]
  strncpy(fontlist, name_list, name_list_len);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gdft.c: In function ‘fontFetch’:
gdft.c:1679:37: note: length computed here
  const unsigned int name_list_len = strlen(name_list);
                                     ^~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

strncpy関数の使用に問題があるようだ。このビルドエラーは以下のissueで議論されている。

annotate.c/gdft.c: Replace strncpy with memccpy to fix -Wstringop-tru… by robertlinux · Pull Request #442 · libgd/libgd

そして,コミットID 748578ff3fa4b636513373f0613e158b930f3ed4で修正された。ただし,この修正は2018-06-22になされている。次期リリースのlibGD 2.2.6,またはmasterであればこのコンパイルエラーは起きないだろう。ただし,現時点の最新のlibGD 2.2.5 (2017-08-30リリース) にはまだ入っていない

そのため,このビルドエラーを回避する工夫が必要だ。このビルドエラーはコンパイルオプションに-Werrorが指定されているのが原因だ。このオプションがあると,本来なら警告で済むものもコンパイルエラーとみなして,ビルドを中断する。

Autoconfでmakeを作成した場合,以下のコンパイルオプションが指定されているようだ。

-Werror -g -O2 -fvisibility=hidden -Wall

そこで,make実行時にCLFAGSを指定してコンパイルオプションを上書きして,ビルドエラーを回避している。

なお,CMakeでビルドする場合,コンパイルオプションに-Werrorが指定されていないため,このエラーは起きない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です