Copyright (C) 2000-2012 |
GNU Info (mysql.info)IBM-AIXIBM-AIX notes ............. Automatic detection of `xlC' is missing from Autoconf, so a `configure' command something like this is needed when compiling MySQL (This example uses the IBM compiler): 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 LDLFAGS="-L /usr/local/lib" export CPPFLAGS=$CFLAGS export CXXFLAGS=$CFLAGS ./configure --prefix=/usr/local \ --localstatedir=/var/mysql \ --sysconfdir=/etc/mysql \ --sbindir='/usr/local/bin' \ --libexecdir='/usr/local/bin' \ --enable-thread-safe-client \ --enable-large-files Above are the options used to compile the MySQL distribution that can be found at `http://www-frec.bull.com/'. If you change the `-O3' to `-O2' in the above configure line, you must also remove the `-qstrict' option (this is a limitation in the IBM C compiler). If you are using `gcc' or `egcs' to compile MySQL, you *MUST* use the `-fno-exceptions' flag, as the exception handling in `gcc'/`egcs' is not thread safe! (This is tested with `egcs' 1.1.). There are also some known problems with IBM's assembler, which may cause it to generate bad code when used with gcc. We recommend the following `configure' line with `egcs' and `gcc 2.95' on AIX: 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 The `-Wa,-many' is necessary for the compile to be successful. IBM is aware of this problem but is in to hurry to fix it because of the workaround available. We don't know if the `-fno-exceptions' is required with `gcc 2.95', but as MySQL doesn't use exceptions and the above option generates faster code, we recommend that you should always use this option with `egcs / gcc'. If you get a problem with assembler code try changing the -mcpu=xxx to match your cpu. Typically power2, power, or powerpc may need to be used, alternatively you might need to use 604 or 604e. I'm not positive but I would think using "power" would likely be safe most of the time, even on a power2 machine. If you don't know what your cpu is then do a "uname -m", this will give you back a string that looks like "000514676700", with a format of xxyyyyyymmss where xx and ss are always 0's, yyyyyy is a unique system id and mm is the id of the CPU Planar. A chart of these values can be found at `http://www.rs6000.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm'. This will give you a machine type and a machine model you can use to determine what type of cpu you have. If you have problems with signals (MySQL dies unexpectedly under high load) you may have found an OS bug with threads and signals. In this case you can tell MySQL not to use signals by configuring with: shell> 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 This doesn't affect the performance of MySQL, but has the side effect that you can't kill clients that are "sleeping" on a connection with `mysqladmin kill' or `mysqladmin shutdown'. Instead, the client will die when it issues its next command. On some versions of AIX, linking with `libbind.a' makes `getservbyname' core dump. This is an AIX bug and should be reported to IBM. For AIX 4.2.1 and gcc you have to do the following changes. After configuring, edit `config.h' and `include/my_config.h' and change the line that says #define HAVE_SNPRINTF 1 to #undef HAVE_SNPRINTF And finally, in `mysqld.cc' you need to add a prototype for initgoups. #ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif automatically generated by info2www version 1.2.2.9 |