libGDのインストール

GNOME Terminal

画像を動的に操作するライブラリーである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"
PKG=libgd VER=2.2.5 TAG=gd-$VER
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
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
  git clean -dfX
  autoreconf -is
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
  make -kj $J distclean clean || :
fi

# 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"
echo $PKG-[0-9]* | xargs -n 1 stow --ignore=dir -D
stow --ignore=dir $PKG-$VER
EOT
インストール例
日付 バージョンOS依存関係
2018-04-30 2.2.5Ubuntu 16.04GNU Make 4.2.1, GCC 8.1.0, libPNG 1.6.16, libJPEG 9c
2019-03-032.2.5Ubuntu 18.04GNU 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が指定されていないため,このエラーは起きない。

libGDのインストール” に対して2件のコメントがあります。

コメントを残す

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