理想未来ってなんやねん

娘可愛い。お父さん頑張る。

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