標準の HP-UX ライブラリに深刻なバグが幾つかあるため、以下のパッチを MySQL を HP-UX 11.0 上で動作させる前にインストールします。
PHKL_22840 Streams cumulative PHNE_22397 ARPA cumulative
これにより EWOULDBLOCK
を
recv()
から EBADF
を
accept()
をスレッド化したアプリケーションで取得する問題を解決します。
gcc 2.95.1 をパッチなしの HP-UX 11.x システムで使用すると、以下のエラーが発生する場合があります。
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()
を安定的に定義しないために起こります。I/usr/include/sys/unistd.h
:184
および /usr/include/sys/pthread.h
:440
に衝突するプロトタイプがあります。
一つの解決策としては
/usr/include/sys/unistd.h
を
mysql/include
にコピーして
unistd.h
を編集しそれを
pthread.h
の定義に一致させます。以下の行を探します。
extern int pthread_atfork(void (*prepare)(), void (*parent)(), void (*child)());
それを以下のように変更します。
extern int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
変更すると以下の configure 行が作用します。
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 コンパイラを使用している場合、以下のコマンド (cc B.11.11.04 でテスト済み) を使用できます。
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \ --with-extra-character-set=complex
以下のようなエラーは無視できます。
aCC: warning 901: unknown option: `-3': use +help for online documentation
configure で以下のようなエラーが表示された場合、HP-UX C および C++ コンパイラへのパスの前に K&R のパスがないことを確認します。
checking for cc option to accept ANSI C... no configure: error: MySQL requires an ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.
コンパイルできない別の原因としては説明通りに
+DD64
フラグを定義しなかったことが考えられます。
HP-UX 11 の別の可能性としては弊社でビルドしてテストした http://dev.mysql.com/downloads/ で提供している MySQL バイナリを使用することです。MySQL により提供された HP-UX 10.20 バイナリは HP-UX 11 上で問題なく動作するとの報告が入ってきています。問題が発生した場合には HP-UX のパッチレベルをチェックする必要があります。