-
If you get errors such as the ones shown here when compiling
sql_yacc.cc
, you probably have run out
of memory or swap space:
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 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++
source files as well as g++ does, but
does not link in libg++
or
libstdc++
by default.
Another way to fix these problems is to install
g++, libg++
, and
libstdc++
. However, we recommend that you
not use libg++
or
libstdc++
with 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.
-
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 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 Section 2.1.2.5, “MySQL Binaries Compiled by MySQL AB”, for a list of flag
definitions that have been found to be useful on various
systems.
-
If you get errors such as those shown here when compiling
mysqld, configure did
not 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. (You must 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 does not need to create
sql_yacc.cc
because MySQL comes with a
pre-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.
On Debian Linux 3.0, you need to install
gawk
instead of the default
mawk
if you want to compile MySQL with
Berkeley DB support.
If you need to debug mysqld or a MySQL
client, run configure with the
--with-debug
option, and then recompile and
link your clients with the new client library. See
Section E.2, “Debugging a MySQL Client”.
-
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:
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[2]: *** [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 wrong 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 named gcc-c++.
-
Use gcc as your C++ compiler by
setting the CXX
environment variable
to gcc:
export CXX="gcc"
You must run configure again after making
either of those changes.