Я пытаюсь запустить скомпилированный 32-разрядный двоичный файл на 64-разрядном узле CentOS 5.3 (на основе RedHat 4.1.2). Бинарный файл жалуется на невозможность найти libmysqlclient.so.15. Такой файл существует на сервере, но он 64-битный и поэтому не годится.
Могу ли я установить 32-битные клиентские библиотеки MySQL на хост? Желательно официальным способом (т.е. через репозиторий). Если нет, то как насчет хакерского пути?
Кроме того, подходящее ли это место для такого вопроса?
РЕДАКТИРОВАТЬ: вот статья это подтверждает, что вы не можете смешивать и сопоставлять биты в одном процессе. Но его рецепт не применим к CentOS.
Википедия заявляет, что RHEL, от которого происходит CentOS, может иметь полную 32-разрядную пользовательскую среду, работающую вместе с 64-разрядной ... В системе уже есть некоторые 32-разрядные библиотеки - libc
и тому подобное. Только не MySQL.
Я могу запускать другие 32-битные двоичные файлы, которые не связаны с libmysqlclient.
РЕДАКТИРОВАТЬ: 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
Как мне установить 32-битный libmysqlclient.so?
Ваша установка MySQL могла быть получена из разных источников. Это может быть rpm-пакет, поставляемый с дистрибутивом, или rpm-пакет Sun / Oracle, или он может быть собран из исходных текстов.
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
это RPM Sun / Oracle и 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
Если ваша установка mysql происходит от Sun / Oracle, перейдите на сервер сообщества MySQL. страница загрузкивыберите среди общедоступных (GA) выпусков тот, который имеет версию mysql 5.0 и 32-разрядную архитектуру, выберите пакет MySQL-shared-community, загрузите и установите его с помощью rpm -i
. Этот пакет предоставляет именно /usr/lib/libmysqlclient.so.15
библиотека.
В CentOS5 libmysqlclient принадлежит пакету mysql.
yum install mysql.i386
должен сделать свое дело.
В CentOS6 он был перемещен в отдельный пакет mysql-libs.
После установки библиотеки проверьте, правильно ли разрешены зависимости динамической библиотеки:
ldd <your_binary> | grep libmysqlclient
должен вернуть что-то вроде
libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15
Если вы хотите узнать, что предоставляет 32-битную версию определенной 64-битной библиотеки, вы можете использовать rpm -q --whatprovides /path/to/your/lib64/library
для определения названия пакета. Затем замените x86_64 на i686 в имени, чтобы получить имя 32-разрядного аналога. Использовать yum search
чтобы проверить, предоставляется ли пакет репозиториями, на которые вы подписаны.
Могу ли я установить 32-битные клиентские библиотеки MySQL на хост?
Да. Redhat устанавливает 32-битные библиотеки в / usr / lib, а 64-битные библиотеки идут в / usr / lib64. ОС автоматически загрузит соответствующую библиотеку при запуске программного обеспечения.