非常に簡素化された Linux カーネル バージョン 2.4.26 の下で、ARM プロセッサ上で実行されるプログラムをクロスコンパイルしています。1 つのプログラムは、長年にわたって機能してきた libmysqlclient を使用します。ただし、過去に使用したバージョン (libmysqlclient.so.10) は、新しいリモート Mysql サーバー (5.5.31) では機能しないようです。
libmysqlclient の新しいバージョン (バージョン 15) を入手しました。私のプログラムは実行時エラーを生成するようになりました:
error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
これは、新しい libmysqlclient に libpthreads が必要であることを意味すると思います。最近の ARM libpthread.so ファイルを /lib ディレクトリにコピーしました。
$ ls -l /lib/libpthread*
-rwxrwxrwx 1 root root 111324 Aug 6 08:46 /lib/libpthread-2.7.so
lrwxrwxrwx 1 root root 17 Aug 6 08:47 /lib/libpthread.so.0 -> libpthread-2.7.so
それでも同じエラーが発生します。ターゲット システムは、ldconfig や ldd などを持たない程度まで削除されます。実行可能ファイルに対して別のより機能的なシステムで ldd を実行しても、驚くことはありません。
ts7500:# ldd vecsSqlLogger
libmysqlclient.so.15 => /usr/lib/libmysqlclient.so.15 (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x401f9000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40322000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40340000)
libnsl.so.1 => /lib/libnsl.so.1 (0x40379000)
libm.so.6 => /lib/libm.so.6 (0x40396000)
libz.so.1 => /usr/lib/libz.so.1 (0x4040e000)
/lib/ld-linux.so.2 (0x40000000)
ts7500:# file /lib/libpthread-2.7.so
/lib/libpthread-2.7.so: ELF 32-bit LSB shared object, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped
このエラーが発生するのはなぜですか? ライブラリ ファイルは、予期されたディレクトリにあることは明らかです。問題は、libpthread.so が私のバージョンより後のカーネル バージョン用にコンパイルされていることでしょうか?