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++.