xlC の自動検知が
Autoconf
で不明のため、configure
を実行する前に多くの変数を設定する必要があります。以下の例では
IBM コンパイラを使用しています。
export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDFLAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
./configure --prefix=/usr/local \
--localstatedir=/var/mysql \
--sbindir='/usr/local/bin' \
--libexecdir='/usr/local/bin' \
--enable-thread-safe-client \
--enable-large-files
前述のオプションを使用して http://www-frec.bull.com/ にある MySQL 配布をコンパイルします。
前述の cofigure 行の
-O3 を -O2
に変更すると、-qstrict
オプションも削除できます。これが IBM C
コンパイラの制限です。
MySQL のコンパイルに
gcc
を使用する場合、-fno-exceptions
フラグを使用する必要があります。これは、gcc
の例外処理がスレッドセーフでないためです。IBM
のコンパイラには
gcc
を使用すると間違ったコードを生成する未詳の問題があります。
AIX 上の gcc 2.95 では次の configure 行を使用してください。
CC="gcc -pipe -mcpu=power -Wa,-many" \ CXX="gcc -pipe -mcpu=power -Wa,-many" \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory
コンパイルを成功させるには
-Wa,-many
オプションが必要です。IBM
はこの問題を認識していますが、回避策があるためにこの問題の修正にはそれほど急いでいません。gcc
2.95 で -fno-exceptions
が必要かどうか定かではありませんが、MySQL
では例外を使用せず、このオプションで生成されるコードのほうが高速であるため、gcc
では常にこのオプションを使用するようにしてください。
アセンブラのコードで問題が発生する場合は、-mcpu=
オプションを CPU
に合うように変更してみてください。一般的には
xxxpower2、power、あるいは
powerpc
が必要です。604
あるいは 604e
が必要になる場合もあります。確かではありませんが
power
はほとんどの時間、power2
マシン上でも安全だと思われます。
どの CPU
を使用しているか分からない場合には、uname
-m
コマンドを実行します。それによって
000514676700
のような文字列を生成し、フォーマットは
xxyyyyyymmss で
xx および
ss は常に
00
で、yyyyyy
は一意のシステム ID で
mm は CPU Planar の ID
です。これらの値の表が
http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm
にあります。
これによりどんな CPU を使用しているかを決めるマシンの種類とマシンのモデルが分かります。
AIX 5.3 のスレッドで問題が発生する場合は、AIX 5.3 をテクノロジレベル 7 (5300-07) にアップグレードするようにしてください。
信号の問題 (MySQL が高負荷で突然停止する) がある場合、スレッドおよび信号の OS バグがある場合があります。この場合、以下のように設定して MySQL が信号を使用しないようにします。
CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
-DDONT_USE_THR_ALARM" \
./configure --prefix=/usr/local/mysql --with-debug \
--with-low-memory
これによって MySQL の性能には影響ありませんが、mysqladmin kill あるいは mysqladmin shutdown と接続して 「sleeping」 しているクライアントを切断できなくなる副作用がでます。その代わり、クライアントはそれが次のコマンドを発行したときに切断します。
AIX
バージョンの中には、libbind.a
とリンクするこによって
getservbyname()
ダンプコアを作成します。これは AIX
のバグですので IBM
への報告する必要があります。
For AIX 4.2.1 および gcc で、以下の変更が必要です。
設定後、config.h
および
include/my_config.h
を編集して行を以下のように変更します。
#define HAVE_SNPRINTF 1
に変更します。
#undef HAVE_SNPRINTF
最後に、mysqld.cc
で、initgroups()
にプロトタイプを追加する必要があります。
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
32 ビットバイナリで mysqld プロセスに大量のメモリーを割り当てる必要がある場合は、ulimit -d unlimited を使用するだけでは十分ではありません。mysqld_safe も変更して以下のような行を追加する必要があります。
export LDR_CNTRL='MAXDATA=0x80000000'
大量のメモリーの使用方法に関する詳細は、http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm を参照してください。
AIX 4.3 のユーザーは AIX にある make ユーティリティーの代わりに gmake を使用する必要があります。
AIX 4.1 では、C コンパイラは個別の製品として AIX とはバンドルしていません。gcc 3.3.2 は、ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gcc/ で入手できます。
AIX 上の gcc 3.3.2 で
MySQL をコンパイルするステップは
gcc 2.95 (特に
config.h および
my_config.h を
configure
実行後に編集する必要性)
を使用したステップに似ています。しかし、configure
を実行する前に、curses.h
ファイルを以下のようにパッチする必要があります。
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/curses.h.ORIG
Mon Dec 26 02:17:28 2005
--- /opt/freeware/lib/gcc-lib/powerpc-ibm-aix5.2.0.0/3.3.2/include/curses.h
Mon Dec 26 02:40:13 2005
***************
*** 2023,2029 ****
#endif /* _AIX32_CURSES */
! #if defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus) || defined
(__STRICT_ANSI__)
extern int delwin (WINDOW *);
extern int endwin (void);
extern int getcurx (WINDOW *);
--- 2023,2029 ----
#endif /* _AIX32_CURSES */
! #if 0 && (defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus)
|| defined
(__STRICT_ANSI__))
extern int delwin (WINDOW *);
extern int endwin (void);
extern int getcurx (WINDOW *);
