All MySQL programs compile cleanly for us with no warnings on Solaris or Linux using gcc. On other systems, warnings may occur due to differences in system include files. See Section 2.9.6, “MIT-pthreads Notes”, for warnings that may occur when using MIT-pthreads. For other problems, check the following list.
The solution to many problems involves reconfiguring. If you do need to reconfigure, take note of the following:
If configure is run after it has previously
been run, it may use information that was gathered during its
previous invocation. This information is stored in
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 re-running configure:
Alternatively, you can run make distclean.
The following list describes some of the problems that have been found to occur most often when compiling MySQL:
Internal compiler error: program cc1plus got fatal signal 11 Out of virtual memory Virtual memory exhausted
The problem is that gcc requires a huge
amount of memory to compile
with inline functions. Try running
configure with the
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
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
usually fixes it.
By default, configure picks
c++ as the compiler name and GNU
c++ links with
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
One cause of these problems is that you may not have
g++, or you may have g++
libstdc++. Take a look at the
config.log file. It should contain the
exact reason why your C++ compiler did not work. To work
around these problems, you can use gcc as
your C++ compiler. Try setting the environment variable
"gcc -O3". For
CXX="gcc -O3" ./configure
This works because gcc compiles C++ source
files as well as g++ does, but does not
libstdc++ by default.
Another way to fix these problems is to install
libstdc++. However, do not use
MySQL because this only increases the binary size of
mysqld without providing any benefits. Some
versions of these libraries have also caused strange problems
for MySQL users in the past.
Using gcc as the C++ compiler is also
required if you want to compile MySQL with RAID functionality
(see Section 12.1.5, “CREATE TABLE Syntax”, for more info on RAID
table type) and you are using GNU gcc
version 3 and above. If you get errors like those following
during the linking stage when you configure MySQL to compile
with the option
--with-raid, try to use
gcc as your C++ compiler by defining the
CXX environment variable:
gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk.o sort.o libnisam.a ../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a -lpthread -lz -lcrypt -lnsl -lm -lpthread ../mysys/libmysys.a(raid.o)(.text+0x79): In function `my_raid_create':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0xdd): In function `my_raid_create':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x129): In function `my_raid_open':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0x189): In function `my_raid_open':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x64b): In function `my_raid_close':: undefined reference to `operator delete(void*)' collect2: ld returned 1 exit status
To define flags to be used by your C or C++ compilers, specify
them using the
CXXFLAGS environment variables. You can
also specify the compiler names this way using
CXX. For example:
export CC CFLAGS CXX CXXFLAGS
If you get errors such as those shown here when compiling
mysqld, configure did
not correctly detect the type of the last argument to
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
(which is generated by configure). Look for
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
int, depending on your operating system.
(You must do this each time you run
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
make: file `Makefile' line 18: Must be a separator (:
pthread.h: No such file or directory
Solaris and FreeBSD are known to have troublesome make programs.
GNU make 3.75 is known to work.
sql_yacc.cc file is generated from
sql_yacc.yy. Normally, the build process
does not need to create
because MySQL comes with a pregenerated copy. However, if you
do need to re-create it, you might encounter this error:
xxxfatal: 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.
On Debian Linux 3.0, you need to install
gawk instead of the default
mawk if you want to compile MySQL 4.1 or
higher with Berkeley DB support.
If you get a compilation error on Linux (for example, SuSE Linux 8.1 or Red Hat Linux 7.3) similar to the following one, you probably do not have g++ installed:
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from incompatible pointer type libmysql.c:1329: too few arguments to function `gethostbyname_r' libmysql.c:1329: warning: assignment makes pointer from integer without a cast make: *** [libmysql.lo] Error 1
By default, the configure script attempts to determine the correct number of arguments by using g++ (the GNU C++ compiler). This test yields incorrect results if g++ is not installed. There are two ways to work around this problem:
Make sure that the GNU C++ g++ is
installed. On some Linux distributions, the required
package is called
gpp; on others, it is
Use gcc as your C++ compiler by setting
CXX environment variable to
You must run configure again after making either of those changes.
For information about acquiring or updating tools, see the system requirements in Section 2.9, “Installing MySQL from Source”.