我正在交叉编译在非常精简的 Linux 内核版本 2.4.26 下在 ARM 处理器上运行的程序。一个程序使用已经工作多年的 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 是为比我晚的内核版本编译的吗?