2.3.5 Проблемы с компиляцией?
На Solaris или Linux с использованием компилятора gcc
все программы MySQL у нас
компилируются чисто и без каких-либо предупреждений. В других системах
могут возникать предупреждения из-за различий включаемых системных файлов
(по поводу предупреждений, которые могут возникать при использовании
потоков MIT-pthreads
, обращайтесь к разделу see section 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
до 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 и 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
В разделе section 2.2.9 Бинарные коды 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 section E.2 Отладка клиента MySQL).
Add your own comment.