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
あるいは egcs
を使用する場合、-fno-exceptions
フラグを使用する必要があります。なぜなら
gcc/egcs
の例外処理はスレッド
セーフではないからです!(これは
egcs 1.1 でテスト済み。)IBM
のコンパイラには gcc
を使用すると間違ったコードを生成する未詳の問題があります。
以下の configure 行を AIX の egcs および gcc 2.95 にお勧めします。
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
はこの問題を認識していますが、回避策があるためにこの問題の修正にはそれほど急いでいません。MySQL
は例外を使用しておらず、オプションが高速のコードを生成し、それを常にegcs
/ gcc
と一緒に使用するように勧めているため、-fno-exceptions
が gcc 2.95
に必要かは定かではありません。
アセンブラのコードで問題が発生した場合には、-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 を使用しているかを決めるマシンの種類とマシンのモデルが分かります。
信号の問題 (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
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 *);
