私は,現在CentOS7を使用していますが,gnuplot で Tab 補完をする際の挙動が,CentOS6を使用していた頃のものと変わっており,不便だったのでソースファイルからビルドしてインストールを行った。
調べてみると,ライセンスの関係でreadlineのライブラリがデフォルトで利用できなくなっているのが原因であることが分かった。
実際に読み込まれるライブラリをCentOS6とCentOS7で見てみると(どちらもyumでインストールしたもの)
・CentOS6
$ which gnuplot /usr/bin/gnuplot $ ldd /usr/bin/gnuplot linux-gate.so.1 => (0x00f2e000) libreadline.so.6 => /lib/libreadline.so.6 (0x00122000) libncurses.so.5 => /lib/libncurses.so.5 (0x008e8000) libz.so.1 => /lib/libz.so.1 (0x0010c000) libgd.so.2 => /usr/lib/libgd.so.2 (0x0015e000) libXpm.so.4 => /usr/lib/libXpm.so.4 (0x042be000) libX11.so.6 => /usr/lib/libX11.so.6 (0x00346000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x056f2000) libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x0066a000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x005cf000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0x006a1000) libm.so.6 => /lib/libm.so.6 (0x00dd4000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x004e0000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00482000) libc.so.6 => /lib/libc.so.6 (0x00c16000) libtinfo.so.5 => /lib/libtinfo.so.5 (0x00a6c000) libdl.so.2 => /lib/libdl.so.2 (0x00dcd000) libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00322000) libexpat.so.1 => /lib/libexpat.so.1 (0x004b6000) /lib/ld-linux.so.2 (0x00bf0000) libXau.so.6 => /usr/lib/libXau.so.6 (0x0031d000)
・CentOS7
$ which gnuplot /usr/bin/gnuplot $ ldd /usr/bin/gnuplot linux-vdso.so.1 => (0x00007fff3b96b000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fc31472e000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fc314503000) libedit.so.0 => /lib64/libedit.so.0 (0x00007fc3142c6000) libz.so.1 => /lib64/libz.so.1 (0x00007fc3140b0000) libgd.so.2 => /lib64/libgd.so.2 (0x00007fc313e68000) libXpm.so.4 => /lib64/libXpm.so.4 (0x00007fc313c56000) libX11.so.6 => /lib64/libX11.so.6 (0x00007fc313918000) libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007fc3136c2000) libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007fc313486000) libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fc3131e0000) libpng15.so.15 => /lib64/libpng15.so.15 (0x00007fc312fb4000) liblua-5.1.so => /lib64/liblua-5.1.so (0x00007fc312d86000) libm.so.6 => /lib64/libm.so.6 (0x00007fc312a84000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc31287f000) libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007fc312672000) libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007fc312427000) libcairo.so.2 => /lib64/libcairo.so.2 (0x00007fc3120ff000) libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007fc311eaf000) libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007fc311b78000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc31186f000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc311659000) libc.so.6 => /lib64/libc.so.6 (0x00007fc311297000) libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fc311074000) libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fc310e4a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc310c2e000) /lib64/ld-linux-x86-64.so.2 (0x00007fc314973000) libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007fc310a18000) libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007fc310814000) libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007fc310612000) libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007fc3103b8000) libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007fc31010b000) libEGL.so.1 => /lib64/libEGL.so.1 (0x00007fc30feea000) libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007fc30fce5000) libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007fc30fadb000) libXrender.so.1 => /lib64/libXrender.so.1 (0x00007fc30f8d1000) libXext.so.6 => /lib64/libXext.so.6 (0x00007fc30f6be000) libGL.so.1 => /lib64/libGL.so.1 (0x00007fc30f427000) librt.so.1 => /lib64/librt.so.1 (0x00007fc30f21f000) libffi.so.6 => /lib64/libffi.so.6 (0x00007fc30f016000) libXau.so.6 => /lib64/libXau.so.6 (0x00007fc30ee12000) libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007fc30ebe4000) libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007fc30e9e2000) libxcb-dri2.so.0 => /lib64/libxcb-dri2.so.0 (0x00007fc30e7dd000) libxcb-xfixes.so.0 => /lib64/libxcb-xfixes.so.0 (0x00007fc30e5d4000) libxcb-shape.so.0 => /lib64/libxcb-shape.so.0 (0x00007fc30e3d0000) libgbm.so.1 => /lib64/libgbm.so.1 (0x00007fc30e1c4000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fc30df9e000) libdrm.so.2 => /lib64/libdrm.so.2 (0x00007fc30dd91000) libglapi.so.0 => /lib64/libglapi.so.0 (0x00007fc30db62000) libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007fc30d95f000) libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007fc30d759000) libxcb-glx.so.0 => /lib64/libxcb-glx.so.0 (0x00007fc30d53e000) libxcb-dri3.so.0 => /lib64/libxcb-dri3.so.0 (0x00007fc30d33b000) libxcb-present.so.0 => /lib64/libxcb-present.so.0 (0x00007fc30d138000) libxcb-randr.so.0 => /lib64/libxcb-randr.so.0 (0x00007fc30cf29000) libxcb-sync.so.1 => /lib64/libxcb-sync.so.1 (0x00007fc30cd22000) libxshmfence.so.1 => /lib64/libxshmfence.so.1 (0x00007fc30cb1f000) libXxf86vm.so.1 => /lib64/libXxf86vm.so.1 (0x00007fc30c918000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fc30c6b7000) liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fc30c491000)
このように,CentOS6では読み込まれていたreadlineがCentOS7では読み込まれていなかった。
それでは,readlineを使用できるようにソースからビルドしていく。環境はCentOS7だが,他の環境でもパッケージを読み替えればできると思う。
- gnuplotの削除とリポジトリからインストールできないようにする
# yum remove gnuplot
/etc/yum.conf
に以下の記述を追記
exclude=gnuplot*
excludeが存在していれば後ろにスペースを開けてgnuplot*
を書く。このように設定するとリポジトリからgnuplotがインストールされなくなる。 - readline-develのインストール
これが入っていないと,このあとの作業をおこなっても意味がないので入れておく。
# yum install readline-devel
- gnuplot のソースファイルをダウンロード & 展開
以下のコマンドでgnuplotの最新版(現在[2016/07/31]はver.5.0.4)がダウンロードできる。# wget "https://sourceforge.net/projects/gnuplot/files/latest/download?source=files" -O gnuplot-latest.tar.gz # tar zxvf gnuplot-latest.tar.gz
- gnuplot のビルド と インストール
展開されたディレクトリの中に移動して
# cd gnuplot-5.0.4
readlineを利用するように設定する。
# ./configure --with-readline=gnu
そして,コンパイルとインストールを行う。
# make && make install
これでインストール完了
最後にldd
の結果を載せておく
ldd /usr/local/bin/gnuplot linux-vdso.so.1 => (0x00007fffdf3cd000) libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f38519f2000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f38517ca000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f38515a0000) libz.so.1 => /lib64/libz.so.1 (0x00007f385138a000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f3851185000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f3850e7d000) libm.so.6 => /lib64/libm.so.6 (0x00007f3850b7b000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3850964000) libc.so.6 => /lib64/libc.so.6 (0x00007f38505a2000) /lib64/ld-linux-x86-64.so.2 (0x00007f3851c56000)
無事readlineが読み込まれるようになった。最初の結果と比べるとライブラリの読み込み量がすごく減っているけど大丈夫だろうか?設定の問題だろうが…,また問題が出てきたら考えることにする。
———- 追記 ———-
使用していて,PNGやJPEGに出力が出来なかった。
使用できるようにするためにはgd-devel
がインストールされている必要があり
# yum install gd-devel
でインストールできる。
この状態で
# ./configure --with-readline=gnu --with-gd # make && make install
として,インストールすればPNG,JPEG出力ができるようになる。