Todos programas MySQL compilam de forma limpa sem alertas no
solaris usando gcc
. Em outros sistemas,
alertas podem ocorrer devido a diferenças em arquivos include
dos sistemas. Veja Secção 2.3.6, “Notas MIT-pthreads” para avisos
que podem ocorrer usando MIT-pthreads. Para outros problemas,
confira a lista abaixo.
A solução para vários problemas envolve reconfiguração. Se você precisa reconfigurar, faça notas do seguinte:
Se configure
é executado depois dele já
ter sido chamado, ele pode usar informação que foi colhida
durante a chamada anterior. Esta informação é armazenada
no arquivo config.cache
. Quando
configure
inicia, ele procura por este
arquivo, lê seu conteúdo, se ele existir, assumindo que
aquela informação continua correta. Essa conjetura é
inválida quando você reconfigurar.
Cada vez que você executa configure
,
você deve executar make
de novo para
recompilar. Entretanto, você pode desejar remover primeiro
antigos arquivos objeto de construções anteriores, porque
eles foram compilados usando diferentes opções de
configuração.
Para prevenir antigas informações de configurações ou
arquivos objetos de serem usados, execute estes comandos antes
de re-executar configure
:
shell>rm config.cache
shell>make clean
Uma alternativa, seria executar make
distclean
A lista abaixo descreve alguns dos problemas compilando o MySQL que tem sido encontrados com mais frequencia:
Se você obtêm erros quando
sql_yacc.cc
como os mostrados abaixo,
você provavelmente tem de falta de memória ou espaço de
swap:
Internal compiler error: program cc1plus got fatal signal 11 ou Out of virtual memory ou Virtual memory exhausted
O problema é que gcc
necessita de grande
quantidade de memória para compilar
sql_yacc.cc
com funções inline. Tente
executando configure
com a opção
--with-low-memory
:
shell> ./configure --with-low-memory
Esta opção adiciona -fno-inline
na a
linha de compilação se você estiver usando
gcc
e -O0
se você
estiver usando outro programa. Você deve tentar a opção
--with-low-memory
mesmo se você tiver
muita memória e espaço de swap que você ache ser
suficieente para não ocorrer erros. Este problema tem
ocorrido mesmo em sistemas com boas configurações de
hardware e a opção --with-low-memory
geralmente corrige isto.
Por padrão, configure
escolhe
c++
como o nome do compilador e GNU
c++
liga com -lg++
. Se
você estiver usando gcc
, este
comportamento pode causar problemas durante a compilação,
como o seguinte:
configure: error: installation or configuration problem: C++ compiler cannot create executables.
Você podem também ter problemas durante a compilação
relacionados à g++
,
libg++
ou libstdc++
.
Uma causa destes problemas é que você pode não ter
g++
ou você pode ter
g++
mas não ter o
libg++
ou o libstdc++
.
De uma olhada no arquivo config.log
.
Ele deve conter a razão exata do porque seu compilador C++
não funciona! Para trabalhar evitando estes problemas,
você pode usar gcc
como seu compilador
C++. Tente configurar a variável de ambiente
CXX
para "gcc -O3"
.
Por exemplo:
shell> CXX="gcc -O3" ./configure
Isto funciona porque gcc
compila código
fonte C++ tão bem quanto g++
faz, mas
não ifaz a ligação em libg++
ou
libstdc++
por padrão.
Outra forma de corrigir estes problemas, com certeza, é
instalando g++
, libg++
e libstdc++
. No entanto gostariamos de
lhe recomendar a não usar libg++
ou
libstdc++
com o MySQL já que isto irá
aumentar o tamanho do binário do mysqld sem lhe trazer
nenhum benefício. Algumas versões destas bibliotecas
também tem causado problemas estranhos para os usuários
MySQL no passado.
Usar gcc
como compilador C++ também é
exigido, se você quiser compilar o MySQL com a
funcionalidade RAID (veja Secção 6.5.3, “Sintaxe CREATE TABLE
”
para mais informações sobre tipos de tabela RAID) e você
estiver usando o GNU gcc
versão 3 e
acima. Se você obter erros como estes abaixo durante o
estágio de ligação quando você configurar o MySQL para
compilar com a opção --with-raid
, tente
usar o gcc
como o seu compilador C++
definindo a variável de ambiente CXX
mencionada acima:
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
Se sua compilação falhar com erros, como um dos seguintes,
você deve atualizar sua versão de make
para 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
O Solaris e o FreeBSD são conhecidos por terem alguns
problemas com o make
.
O GNU make
versão 3.75 irá funcionar.
Se você deseja definir algumas opções que devem ser
usadas pelo seu compilador C ou C++, adicione as opções
para as variáveis de ambiente CFLAGS
e
CXXFLAGS
. Você pode também especificar
os nomes do compilador a ser usado da mesma forma utilizando
CC
e CXX
. Exemplo:
shell>CC=gcc
shell>CFLAGS=-O3
shell>CXX=gcc
shell>CXXFLAGS=-O3
shell>export CC CFLAGS CXX CXXFLAGS
Olhe em Secção 2.2.8, “Binários MySQL compilados pela MySQL AB” para uma lista de definição de opções que tenham sido úteis em vários sistemas.
Se você recebeu uma mensagem de erro como esta, é
necessário atualizar o compilador gcc
:
O gcc
2.8.1 funciona, mas recomendamos o
uso do gcc
2.95.2 ou
egcs
1.0.3a em seu lugar.
Se você obtem erros como estes vistos abaixo enquanto
estiver compilando o mysqld
, o
configure
não detectou corretamente o
tipo do último argumento para accept()
,
getsockname()
ou
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);
Para corrigir isto, edite o arquivo
config.h
(que é gerado pelo
configure
). Procure por estas linhas:
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
Altere XXX
para size_t
ou int
, dependendo de seu sistema
operacional. (Perceba que você deverá fazer isto cada vez
que você executar configure
, porque
configure
regenera
config.h
.)
O arquivo sql_yacc.cc
é gerado pelo
sql_yacc.yy
. Normalmente o processo de
construção não necessita criar
sql_yacc.cc
, porque o MySQL já vem com
uma cópia pré-gerada. Entretanto, se você necessita
recriá-lo você pode encontrar este erro:
"sql_yacc.yy", line xxx fatal: default action causes potential...
Isto é um indício de que sua versão do
yacc
é deficiente. Provavelmente você
precisará instalar o bison
(a versão
GNU de yacc
) e usá-lo no lugar do
yacc
.
Se você necessita depurar mysqld
ou um
cliente MySQL, execute configure
com a
opção --with-debug
, então recompile e
ligue seus clientes com a nova biblioteca cliente. See
Secção E.2, “Depurando um cliente MySQL.”.
Se você tem um erro de compilação no Linux (ex. SuSE Linux 8.1 ou Red Hat Linux 7.3) parecido com o seguinte:
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
Por padrão, o script configure
tenta
determinar o número correto de argumentos usando o
compilador GNU C++ g++
. Ele testa os
resultados errados permitidos, se o g++
não está instalado. Existem dois modos de contornar este
problema:
Certifique-se de que o GNU C++ g++
está instalado. Em algumas distribuições Linux, o
pacote exigido é chamado gpp
, em
outro ele é chamado gcc-c++
.
Use o gcc
como o seu compilador C++
configurando a variáavel de ambiente
CXX
para gcc
:
export CXX="gcc"
Note que você precisa executar o
configure
novamente após isto.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.