64bit版のライブラリのインストール先について
Linuxでの64bit版ライブラリのインストールに関するメモ。
Linuxで64bit版のライブラリはlib64ディレクトリに配置されますが、古いプログラムや、あまりお行儀の良くないMakefileでは64bitであろうがなかろうがlibに直接インストールしてしまうものもあります。
ところがCentOS等のディストリビューションでは、libにインストールされてしまうものでも64bitのライブラリはlib64ディレクトリにインストールされるようになっています。
実際どうやっているかというと、RPMの場合はRPMを作るための手順ファイルであるspecファイルで吸収しています。
インストール先を指定できる場合
configureの--with-libdirオプション等でインストール先を指定できる場合は、そのまま使用します。
以下はphp.specの例。--with-libdir=%{_lib}を渡しています。
〜〜〜省略〜〜〜 %configure \ --cache-file=../config.cache \ --with-libdir=%{_lib} \ 〜〜〜省略〜〜〜
インストール先を指定できるない場合
Makefileでインストール先がlibに固定されている場合は、RPM_BUILD_ROOTにインストールした後で、libから移動しています。
以下はzlib.specの例。%{_prefix}/libと%{_libdir}が異なる場合は、%{_libdir}に移動しています。
〜〜〜省略〜〜〜 rm -rf ${RPM_BUILD_ROOT} mkdir -p ${RPM_BUILD_ROOT}%{_prefix} mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man3 make -f Makefile.shared install prefix=${RPM_BUILD_ROOT}%{_prefix} make -f Makefile.static install prefix=${RPM_BUILD_ROOT}%{_prefix} install -m644 zutil.h ${RPM_BUILD_ROOT}%{_includedir}/zutil.h if [ "%{_prefix}/lib" != "%{_libdir}" ]; then mkdir -p ${RPM_BUILD_ROOT}%{_libdir} mv ${RPM_BUILD_ROOT}%{_prefix}/lib/* ${RPM_BUILD_ROOT}%{_libdir} rmdir ${RPM_BUILD_ROOT}%{_prefix}/lib fi 〜〜〜省略〜〜〜
なぜこのような事を調べたかというと、野良ビルドでインストールしようとしていたライブラリがx86_64環境でもlib64ではなくlibにインストールするようにMakefileに書かれており、あまり良くないのでMakefileを書き換えるなりしてlib64にインストールした方が良いんじゃないかと思ったので、裏付けの為に調べてみました。
やっぱり64bit版のライブラリはlib64にインストールすべきということで、心置きなくlib64にインストールしたいと思います。
追記
Makefileで64bitかどうかを判別して、libかlib64のどちらを使用するか決める方法。
LBITS := $(shell getconf LONG_BIT) ifeq ($(LBITS),64) LIBDIR=$(PREFIX)/lib64 else LIBDIR=$(PREFIX)/lib endif