まとめ
事の起こり
事情によりHyper Estraierをインストールする必要があったのですが、通常通りに make
すると QDBM が Segmentation fault して動きませんでした。
[root@ip-10-0-1-37 hyperestraier-1.4.13]# make check rm -rf casket casket- LD_LIBRARY_PATH=.:/lib:/usr/lib:/usr/local/lib:/root/lib:/usr/local/lib::/usr/local/lib ./estcmd create -tr -xl -attr '@uri' seq -attr '@title' str \ -attr '@author' str -attr '@mdate' num -attr '@size' num casket ./estcmd: INFO: status: name=casket dnum=0 wnum=0 fsiz=19924864 crnum=0 csiz=0 dknum=0 make: ** [check] Segmentation fault
[root@ip-10-0-1-37 qdbm-1.8.78]# make check (snip) rm -rf casket* LD_LIBRARY_PATH=.:/lib:/usr/lib:/usr/local/lib:/root/lib:/usr/local/lib ./odtest write casket 500 50 5000
name=casket dnum=500 wnum=50 pnum=5000 ibnum=-1 idnum=-1 cbnum=-1 csiz=-1 .make: *** [check] Segmentation fault
いろいろ情報をあさっていると、似た報告がありました。どうやら gcc 7 だと発生し、 gcc 6 なら発生しないようです。
estcmd built with gcc-7.2.0 caused segfault. I sent mails to the author, but I couldn't get a reply.
http://linuxplayers.g1.xrea.com/mozc-ut2.html
AmazonLInux2 の gcc
このgccは維持しながら、必要なときに gcc 6 を使えるようにしたい。
Environment modules
Environment modules が使えそうです。
Environment modules のインストール
$ sudo yum install environment-modules
gcc6 のインストール
yum install autogen
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.5.0/gcc-6.5.0.tar.gz -O /tmp/gcc-6.5.0.tar.gz tar xvf /tmp/gcc-6.5.0.tar.gz -C /usr/local/src cd /usr/local/src/gcc-6.5.0 ./contrib/download_prerequisites mkdir build && cd build ../configure --enable-languages=c,c++ --prefix=/usr/local/gcc-6.5.0 --disable-bootstrap --disable-multilib make && make check && make install
ソースディレクトリ内で configure しない理由 https://gcc.gnu.org/wiki/FAQ#configure
gcc6 を Environment modules で使うための設定
$ vi /etc/modulefiles/gcc-6.5.0
#%Module 1.0 # # gcc-6.5.0 module for use with 'environment-modules' package: # set GCChome /usr/local/gcc-6.5.0 prepend-path PATH $GCChome/bin prepend-path INCLUDE $GCChome/include prepend-path LD_LIBRARY_PATH $GCChome/lib prepend-path MANPATH $GCChome/man
使い方
モジュール一覧
$ module avail ----------------------- /usr/share/Modules/modulefiles ------------------------ dot module-git module-info modules null use.own ------------------------------ /etc/modulefiles ------------------------------- gcc-6.5.0
モジュールを使う
$ module add gcc-6.5.0 $ gcc --version Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/gcc-6.5.0/libexec/gcc/x86_64-pc-linux-gnu/6.5.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../configure --enable-languages=c,c++ --prefix=/usr/local/gcc-6.5.0 --disable-bootstrap --disable-multilib Thread model: posix gcc version 6.5.0 (GCC)
使い終わったらアンロード
$ module unload gcc-6.5.0 $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-libsanitizer --enable-gnu-indirect-function --enable-libcilkrts --enable-libatomic --enable-libquadmath --enable-libitm --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux Thread model: posix gcc version 7.3.1 20180712 (Red Hat 7.3.1-6) (GCC)