2.6.6.3 Примечания к HP-UX версий 11.x
Для HP-UX версий 11.x мы рекомендуем использовать MySQL не ниже 3.23.15.
Из-за некоторых критических ошибок в стандартных библиотеках HP-UX до
попытки запуска MySQL на HP-UX 11.0 необходимо установить следующие патчи:
PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative
Применение данных патчей решит проблему получения EWOULDBLOCK
от recv()
и
EBADF
от accept()
в потоковых приложениях.
При использовании gcc
2.95.1 в системе, к которой не были применены патчи,
возникнет ошибка:
In file included from /usr/include/unistd.h:11,
from ../include/global.h:125,
from mysql_priv.h:15,
from item.cc:19:
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
from mysql_priv.h:158,
from item.cc:19:
Проблема заключается в том, что HP-UX существуют несовместимые определения
функции pthreads_atfork()
. Конфликтующие прототипы находятся в
`/usr/include/sys/unistd.h':184 и в `/usr/include/sys/pthread.h':440
(подробности приведены ниже).
Одно из возможных решений заключается в том, чтобы скопировать
`/usr/include/sys/unistd.h' в `mysql/include' и отредактировать `unistd.h' так,
чтобы определение совпадало с определением из `pthread.h'. Ниже приведен
результат работы diff
:
183,184c183,184
< extern int pthread_atfork(void (*prepare)(), void (*parent)(),
< void (*child)());
---
> extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
> void (*child)(void));
После этого должна работать конфигурационная программа со следующими
параметрами:
CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \
./configure --prefix=/usr/local/mysql --disable-shared
Ниже приведена информация, которую прислал нам пользователь HP-UX версии
11.x. Она касается компиляции MySQL компилятором Hp-UX:x:
Окружение:
подходящие компиляторы.
setenv CC cc
setenv CXX aCC
опции
setenv CFLAGS -D_REENTRANT
setenv CXXFLAGS -D_REENTRANT
setenv CPPFLAGS -D_REENTRANT
% aCC -V
aCC: HP ANSI C++ B3910B X.03.14.06
% cc -V /tmp/empty.c
cpp.ansi: HP92453-01 A.11.02.00 HP C Preprocessor (ANSI)
ccom: HP92453-01 A.11.01.00 HP C Compiler
cc: "/tmp/empty.c", line 1: warning 501: Empty source file.
конфигурация:
./configure --with-pthread \
--prefix=/source-control/mysql \
--with-named-thread-libs=-lpthread \
--with-low-memory
к `include/m_ctype.h' добавлена запись #define _CTYPE_INCLUDED
. Это одно из
обозначений, определенных в HP в `/usr/include/ctype.h':
/* Don't include std ctype.h when this is included */
#define _CTYPE_H
#define __CTYPE_INCLUDED
#define _CTYPE_INCLUDED
#define _CTYPE_USING /* Don't put names in global namespace. */
-
для того, чтобы компилятор распознавал прототип функции
localtime_r
, во
время компиляции необходимо использовать флаг -D_REENTRANT
. Можно также
написать собственный прототип для localtime_r
. Но я хочу устранить
существующие ошибки без внесения новых. Поскольку я не знаю точно, когда
этот ключ действительно нужен, я добавил его использование во всех
случаях.
-
флаги оптимизации, используемые при сборке MySQL (-O3), не распознаются
компилятором HP. Я не изменял ключи.
При получении следующего сообщения об ошибке при работе configure
checking for cc option to accept ANSI C... no
configure: error: MySQL requires a ANSI C compiler (and a C++ compiler).
Try gcc. See the Installation chapter in the Reference Manual.
следует удостовериться, что путь к компилятору K&R не указан раньше, чем
путь к компиляторам HP-UX C и C++.