sqlite が何故か libreadline を探すので libmap.conf で libedit に振り替えた2020年11月07日 13時19分43秒

FreeBSD 12.1-RELEASE の amd64 版も動かしている。今でも物理的制約により動作環境としては i386 が多いのだが、これはメモリが大量に必要になる時にのみ使う環境。元々、i386 が入っていたシステムに amd64 を上書きインストールをして移行した。ports 経由のソフトウェアは amd64 のバイナリパッケージをインストールしたのだが変なエラーが出る。

readline ライブラリは FreeBSD 9.x-RELEASE ぐらい edit ライブラリに置き換えられて無くなった筈なのだが。

% sqlite3
ld-elf.so.1: /lib/libreadline.so.8: unsupported file layout
% sqlite
ld-elf.so.1: /lib/libreadline.so.8: unsupported file layout
FreeBSD 12.x のバイナリが libreadline を探しているのは不可解だが、取り敢えず libreadline ファイルを調べてみる。
% ls -lsd /lib/libreadline.so*
172 -r--r--r--  1 root  wheel  174652 May  8  2005 /lib/libreadline.so.5
176 -r--r--r--  1 root  wheel  179196 Aug 18  2007 /lib/libreadline.so.6
196 -r--r--r--  1 root  wheel  199400 Jan  4  2010 /lib/libreadline.so.7
204 -r--r--r--  1 root  wheel  206168 Aug 12  2015 /lib/libreadline.so.8
% file /lib/libreadline.so*
/lib/libreadline.so.5: ELF 32-bit LSB shared object, Intel 80386, version 1 (Fre
eBSD), dynamically linked, stripped
/lib/libreadline.so.6: ELF 32-bit LSB shared object, Intel 80386, version 1 (Fre
eBSD), dynamically linked, stripped
/lib/libreadline.so.7: ELF 32-bit LSB shared object, Intel 80386, version 1 (Fre
eBSD), dynamically linked, stripped
/lib/libreadline.so.8: ELF 32-bit LSB shared object, Intel 80386, version 1 (Fre
eBSD), dynamically linked, stripped
古い i386 のファイルが残っている。

libedit ファイルも調べてみる。

% ls -lsd /lib/libedit.so*
 80 -r--r--r--  1 root  wheel   79976 May  8  2005 /lib/libedit.so.4
 84 -r--r--r--  1 root  wheel   84248 Aug 18  2007 /lib/libedit.so.5
 88 -r--r--r--  1 root  wheel   88472 Jan  4  2010 /lib/libedit.so.6
228 -r--r--r--  1 root  wheel  232936 May  7 11:40 /lib/libedit.so.7
% file /lib/libedit.so*
/lib/libedit.so.4: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD
), dynamically linked, stripped
/lib/libedit.so.5: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD
), dynamically linked, stripped
/lib/libedit.so.6: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD
), dynamically linked, stripped
/lib/libedit.so.7: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dy
namically linked, stripped
こちらも i386 の物が残っているが、最新版は amd64 版だ。

取り敢えず、この問題はこの環境に依存したもののようだ。下手に動的ライブラリを削除して動かなくなるのも、困る。この様な時は、libmap.conf を使って libreadline が必要な時には、libedit を変わりに読ませた方が良いだろう。

# /etc/libmap.conf
libreadline.so.8                        libedit.so.7
/etc/libmap.conf に libreadline.so.8 の代わりに libedit.so.7 を読み込む様に設定。sqlite が動き出した。

次回