GNU Info

Info Node: (mysql.info)Compilation problems

(mysql.info)Compilation problems


Next: MIT-pthreads Prev: Installing source tree Up: Installing source
Enter node , (file) or (file)node

Problems Compiling?
-------------------

All MySQL programs compile cleanly for us with no warnings on Solaris
using `gcc'.  On other systems, warnings may occur due to differences
in system include files.  See Note: MIT-pthreads for warnings that
may occur when using MIT-pthreads.  For other problems, check the list
below.

The solution to many problems involves reconfiguring.  If you do need to
reconfigure, take note of the following:

   * If `configure' is run after it already has been run, it may use
     information that was gathered during its previous invocation.  This
     information is stored in `config.cache'.  When `configure' starts
     up, it looks for that file and reads its contents if it exists, on
     the assumption that the information is still correct.  That
     assumption is invalid when you reconfigure.

   * Each time you run `configure', you must run `make' again to
     recompile.  However, you may want to remove old object files from
     previous builds first, because they were compiled using different
     configuration options.

To prevent old configuration information or object files from being
used, run these commands before rerunning `configure':

     shell> rm config.cache
     shell> make clean

Alternatively, you can run `make distclean'.

The list below describes some of the problems compiling MySQL that have
been found to occur most often:

   * If you get errors when compiling `sql_yacc.cc', such as the ones
     shown below, you have probably run out of memory or swap space:

          Internal compiler error: program cc1plus got fatal signal 11
            or
          Out of virtual memory
            or
          Virtual memory exhausted

     The problem is that `gcc' requires huge amounts of memory to
     compile `sql_yacc.cc' with inline functions.  Try running
     `configure' with the `--with-low-memory' option:

          shell> ./configure --with-low-memory

     This option causes `-fno-inline' to be added to the compile line
     if you are using `gcc' and `-O0' if you are using something else.
     You should try the `--with-low-memory' option even if you have so
     much memory and swap space that you think you can't possibly have
     run out.  This problem has been observed to occur even on systems
     with generous hardware configurations, and the `--with-low-memory'
     option usually fixes it.

   * By default, `configure' picks `c++' as the compiler name and GNU
     `c++' links with `-lg++'.  If you are using `gcc', that behavior
     can cause problems during configuration such as this:

          configure: error: installation or configuration problem:
          C++ compiler cannot create executables.

     You might also observe problems during compilation related to
     `g++', `libg++', or `libstdc++'.

     One cause of these problems is that you may not have `g++', or you
     may have `g++' but not `libg++', or `libstdc++'.  Take a look at
     the `config.log' file.  It should contain the exact reason why
     your c++ compiler didn't work!  To work around these problems, you
     can use `gcc' as your C++ compiler.  Try setting the environment
     variable `CXX' to `"gcc -O3"'.  For example:

          shell> CXX="gcc -O3" ./configure

     This works because `gcc' compiles C++ sources as well as `g++'
     does, but does not link in `libg++' or `libstdc++' by default.

     Another way to fix these problems, of course, is to install `g++',
     `libg++' and `libstdc++'.

   * If your compile fails with errors, such as any of the following,
     you must upgrade your version of `make' to GNU `make':

          making all in mit-pthreads
          make: Fatal error in reader: Makefile, line 18:
          Badly formed macro assignment
            or
          make: file `Makefile' line 18: Must be a separator (:
            or
          pthread.h: No such file or directory

     Solaris and FreeBSD are known to have troublesome `make' programs.

     GNU `make' Version 3.75 is known to work.

   * If you want to define flags to be used by your C or C++ compilers,
     do so by adding the flags to the `CFLAGS' and `CXXFLAGS'
     environment variables.  You can also specify the compiler names
     this way using `CC' and `CXX'.  For example:

          shell> CC=gcc
          shell> CFLAGS=-O3
          shell> CXX=gcc
          shell> CXXFLAGS=-O3
          shell> export CC CFLAGS CXX CXXFLAGS

     See Note: MySQL binaries, for a list of flag definitions that
     have been found to be useful on various systems.

   * If you get an error message like this, you need to upgrade your
     `gcc' compiler:

          client/libmysql.c:273: parse error before `__attribute__'

     `gcc' 2.8.1 is known to work, but we recommend using `gcc' 2.95.2
     or `egcs' 1.0.3a instead.

   * If you get errors such as those shown below when compiling
     `mysqld', `configure' didn't correctly detect the type of the last
     argument to `accept()', `getsockname()', or `getpeername()':

          cxx: Error: mysqld.cc, line 645: In this statement, the referenced
               type of the pointer value "&length" is "unsigned long", which
               is not compatible with "int".
          new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);

     To fix this, edit the `config.h' file (which is generated by
     `configure').  Look for these lines:

          /* Define as the base type of the last arg to accept */
          #define SOCKET_SIZE_TYPE XXX

     Change `XXX' to `size_t' or `int', depending on your operating
     system.  (Note that you will have to do this each time you run
     `configure', because `configure' regenerates `config.h'.)

   * The `sql_yacc.cc' file is generated from `sql_yacc.yy'.  Normally
     the build process doesn't need to create `sql_yacc.cc', because
     MySQL comes with an already-generated copy.  However, if you do
     need to re-create it, you might encounter this error:

          "sql_yacc.yy", line xxx fatal: default action causes potential...

     This is a sign that your version of `yacc' is deficient.  You
     probably need to install `bison' (the GNU version of `yacc') and
     use that instead.

   * If you need to debug `mysqld' or a MySQL client, run `configure'
     with the `--with-debug' option, then recompile and link your
     clients with the new client library.  Note: Debugging client.


automatically generated by info2www version 1.2.2.9