我正在尝试在 64 位 CentOS 5.3(基于 RedHat 4.1.2)主机上运行已编译的 32 位二进制文件。该二进制文件抱怨无法找到 libmysqlclient.so.15。服务器上存在这样的文件,但它是 64 位的,因此不太好。
我可以在主机上安装 32 位 MySQL 客户端库吗?最好以官方方式(即通过存储库)。如果不行,那用黑客方式怎么样?
此外,这是一个提出此类问题的适当场所吗?
编辑:这是一篇文章这证实了你不能在一个进程内混合和匹配位数。但其方法不适用于 CentOS。
Wikipedia 指出,CentOS 的衍生版本 RHEL 能够拥有完整的 32 位用户空间和 64 位用户空间... 系统上已经有一些 32 位库 -libc
等等。只是没有 MySQL。
我可以运行其他不链接到 libmysqlclient 的 32 位二进制文件。
编辑:yum search mysql
内容如下:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.symnds.com
* extras: mirror.symnds.com
* updates: mirror.wiredtree.com
addons | 1.9 kB 00:00
base | 1.1 kB 00:00
extras | 1.9 kB 00:00
updates | 1.9 kB 00:00
Excluding Packages in global exclude list
Finished
================================ Matched: mysql ================================
mod_auth_mysql.x86_64 : Basic authentication for the Apache web server using a
: MySQL database.
qt-MySQL.x86_64 : MySQL drivers for Qt's SQL classes.
MySQL-bench.x86_64 : MySQL - Benchmarks and test system
MySQL-client.x86_64 : MySQL - Client
MySQL-devel.x86_64 : MySQL - Development header files and libraries
MySQL-python.x86_64 : An interface to MySQL
MySQL-server.x86_64 : MySQL: a very fast and reliable SQL database server
MySQL-shared.x86_64 : MySQL - Shared libraries
apr-util-mysql.x86_64 : APR utility library MySQL DBD driver
bytefx-data-mysql.x86_64 : MySQL database connectivity for Mono
freeradius-mysql.x86_64 : MySQL bindings for freeradius
freeradius2-mysql.x86_64 : MySQL support for freeradius
libdbi-dbd-mysql.x86_64 : MySQL plugin for libdbi
pdns-backend-mysql.x86_64 : MySQL backend for pdns
pure-ftpd.x86_64 : Lightweight, fast and secure FTP server
qt4-mysql.x86_64 : MySQL drivers for Qt's SQL classes
rsyslog.x86_64 : Enhanced system logging and kernel message trapping daemon
rsyslog-mysql.x86_64 : MySQL support for rsyslog
unixODBC.i386 : A complete ODBC driver manager for Linux
unixODBC.x86_64 : A complete ODBC driver manager for Linux
unixODBC64.x86_64 : A complete ODBC driver manager for Linux
答案1
如何安装 32 位 libmysqlclient.so?
1.安装
您的 MySQL 安装可能来自不同的来源。它可能是发行版附带的 rpm 或 Sun/Oracle rpm,也可能是从源代码构建的。
rpm -q --whatprovides $(which mysql)
应该告诉你包的名称,例如
MySQL-client-...
mysql-5.0...
mysql-community-server-client
mysql-5.1...
no package provides /usr/bin/mysql
。
在 CentOS 上,前两个选项最有可能。MySQL-client-5.0
是 Sun/Oracle RPM,mysql-5.0
可能来自发行版。用于rpm -q --info <package_name>
获取扩展信息并验证该Vendor:
行是否证实了假设。
以下是典型的供应商行:
Name : MySQL-shared-community Relocations: (not relocatable)
Version : 5.0.96 Vendor: Oracle and/or its affiliates
1.1 来自 Sun/Oracle RPM 的 MySQL
如果你的 mysql 安装来自 Sun/Oracle,请转到 MySQL 社区服务器下载页面,在 General Availability (GA) 版本中选择具有 mysql 5.0 版本和 32 位架构的版本,选择 MySQL-shared-community 包,使用 下载并安装rpm -i
。此包提供了所需的/usr/lib/libmysqlclient.so.15
库。
1.2 CentOS 上的 mysql
在CentOS5中,libmysqlclient属于mysql包。
yum install mysql.i386
应该可以解决问题。
在 CentOS6 中它被移至单独的 mysql-libs 包。
2. 测试
安装库后,检查动态库依赖关系是否正确解析:
ldd <your_binary> | grep libmysqlclient
应该返回类似
libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15
如果您想知道哪个库提供了特定 64 位库的 32 位版本,您可以使用rpm -q --whatprovides /path/to/your/lib64/library
来确定包的名称。然后将名称中的 x86_64 替换为 i686 以获取 32 位版本的名称。使用yum search
来验证您订阅的存储库是否提供了该包。
答案2
我可以在主机上安装 32 位 MySQL 客户端库吗?
是的。Redhat 将 32 位库安装在 /usr/lib 中,将 64 位库安装在 /usr/lib64 中。软件运行时,操作系统会自动加载相应的库。