На Solaris или Linux с использованием компилятора gcc
все программы MySQL у нас
компилируются чисто и без каких-либо предупреждений. В других системах
могут возникать предупреждения из-за различий включаемых системных файлов
(по поводу предупреждений, которые могут возникать при использовании
потоков MIT-pthreads
, обращайтесь к разделу see Раздел 2.3.6, «Замечания по потокам MIT-pthreads»).
Относительно других проблем сверьтесь с приведенным ниже списком.
Решение многих проблем предполагает выполнение переконфигурирования. В случаях, когда переконфигурирование действительно необходимо, следует учитывать следующее:
Если
configure
запускается после того, как эта команда уже запускалась, то можно использовать информацию, которая была собрана во время предыдущего вызова команды (такая информация хранится вconfig.cache
). При запускеconfigure
ищет данный файл и, если он существует, читает его содержимое, исходя из предположения, что данная информация все еще правильна. При выполнении переконфигурации это предположение является некорректным.-
Каждый раз при запуске
configure
необходимо опять запускатьmake
для перекомпилирования. Однако, возможно, вначале вам потребуется удалить старые объектные файлы из предыдущих компоновок, поскольку они были скомпилированы с использованием других опций конфигурации.Чтобы не допустить использования старой конфигурационной информации или объектных файлов, перед перезапуском
configure
запустите следующие команды:shell> rm config.cache shell> make clean
В качестве альтернативного варианта можно использовать команду
make distclean
.В следующем списке представлены некоторые проблемы компилирования MySQL, которые, как оказалось, возникают наиболее часто:
-
Если при компиляции
sql_yacc.cc
вы получаете ошибки, подобные представленным ниже, то, возможно, произошел выход за пределы памяти или пространства подкачки (свопинга):Internal compiler error: program cc1plus got fatal signal 11 или Out of virtual memory или Virtual memory exhausted
Проблема заключается в том, что для компиляции
sql_yacc.cc
со встраиваемыми функциями компиляторуgcc
требуется значительное количество памяти. Попробуйте произвести запускconfigure
с опцией--with-low-memory
:shell> ./configure --with-low-memory
Данная опция вызывает добавление
-fno-inline
к компилируемой строке дляgcc
и-O0
- при использовании какого-либо другого компилятора. Даже если у вас столько памяти и пространства для свопинга, что, по вашему мнению, невозможно выйти за их пределы, все же стоит попытаться использовать опциюwith-low-memory
. Эта проблема, по нашим наблюдениям, возникала даже на системах с аппаратными реализациями, обладающими широкими возможностями; обычно она устраняется с помощью опции--with-low-memory
. -
По умолчанию
configure
выбирает c++ как имя компилятора и GNU c++ линкуется с-lg++
. При использованииgcc
этот режим работы может вызывать такие проблемы в процессе конфигурации, как:configure: error: installation or configuration problem: C++ compiler cannot create executables.
Во время компиляции могут также возникать проблемы, относящиеся к
g++
,libg++
илиlibstdc++
. Одна из причин их возникновения заключается в том, что, возможно, у вас нетg++
или естьg++
, но нет библиотекиlibg++
илиlibstdc++
. Следует изучить файлconfig.log
- по нему вы должны точно определить причину, по которой не работал компилятор c++ ! Чтобы обойти эти проблемы, можно в качестве компилятора C++ использовать gcc. Попробуйте установить переменную окруженияCXX
вgcc -O3
. Например:shell> CXX="gcc -O3" ./configure
Эта команда работает, поскольку gcc компилирует исходные коды C++ так же хорошо, как и
g++
, но по умолчанию не линкуетlibg++
илиlibstdc++
. Есть, конечно, и другая возможность устранения этих проблем, которая заключается в установкеg++
,libg++
иlibstdc++
. Однако мы не рекомендовали бы использоватьlibg++
илиlibstdc++
с MySQL, поскольку это только увеличит размер бинарного кодаmysqld
без предоставления каких-либо преимуществ. Некоторые версии этих библиотек в прошлом также вызывали непонятные проблемы у пользователей MySQL. -
Если процесс компиляции завершается аварийно и выводятся такие ошибки, как приведены ниже, то вам следует сделать апгрейд своей версии
make
до GNUmake
: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 и FreeBSD, как известно, имеют ненадежные программы
make
.Известно также, что версия GNU
make
3.75 работает. -
Если вы хотите определить флаги для использования их компиляторами C или C++, следует добавить флаги к переменным окружения
CFLAGS
иCXXFLAGS
. Точно так же можно также указать имена компиляторов, используяCC
иCXX
. Например:shell> CC=gcc shell> CFLAGS=-O3 shell> CXX=gcc shell> CXXFLAGS=-O3 shell> export CC CFLAGS CXX CXXFLAGS
В разделе Раздел 2.2.7, «Бинарные коды MySQL, скомпилированные в MySQL AB» приведен список полезных для различных систем определений флагов.
-
При получении сообщения об ошибке, подобного приведенному ниже, необходимо модернизировать ваш компилятор
gcc
:client/libmysql.c:273: parse error before `__attribute__'
Компилятор
gcc
2.8.1 известен как работающий, но мы рекомендуем вместо него использоватьgcc
2.95.2 илиegcs
1.0.3a. -
Если при компиляции
mysqld
вы получаете ошибки, подобные приведенным ниже, то это означает, что командаconfigure
некорректно определила тип последнего аргумента в функцияхaccept()
,getsockname()
или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);
Чтобы устранить эту ошибку, отредактируйте файл
config.h
(который генерируетсяconfigure
). Найдите в нем следующие строки:/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
и измените
XXX
наsize_t
илиint
- в зависимости от своей операционной системы (учтите, что эти действия необходимо будет повторять каждый раз при запускеconfigure
, поскольку configure восстанавливает файлconfig.h
). -
Файл
sql_yacc.cc
генерируется изsql_yacc.yy
. Обычно в процессе сборки не требуется создаватьsql_yacc.cc
, поскольку MySQL поставляется с уже сгенерированной копией. Однако если действительно необходимо создать этот файл заново, то можно столкнуться со следующей ошибкой:"sql_yacc.yy", line xxx fatal: default action causes potential...
Это признак того, что ваша версия
yacc
является неполной. Возможно, следует установитьbison
(GNU-версия yacc) и использовать вместоyacc
. При необходимости отладки
mysqld
или клиента MySQL запуститеconfigure
с опцией--with-debug
, затем перекомпилируйте и слинкуйте эти программы с новой клиентской библиотекой (see Раздел D.2, «Отладка клиента MySQL»).