# Главная
# О библиотеке

# Выбор дистрибутива
преимущества Linux/UNIX | основные дистрибутивы | серверный Linux | BSD | LiveCDs | прочее

# Установка и удаление программ
общие вопросы | каталоги софта | специальные случаи

# Настройка и работа
установка, загрузчики | настройка Linux | консоль | файловые системы | процессы | шеллы, русификация, коммандеры | виртуальные машины, эмуляторы

# X Window и оконные менеджеры
настройка X Window | GNOME | KDE | IceWM и др.

# Работа с текстами
редакторы | офис | шрифты, кодировки и русификация | преобразования текстовых файлов | LaTeX, SGML и др. | словари

# Графика
GIMP | фото | обработка изображений | форматы графических файлов

# Сети, администрирование
общие вопросы | Dialup & PPP | брандмауэры | маршрутизация | работа в Windows-сетях | веб-серверы | Apache | прокси-серверы | сетевая печать | прочее

# Программирование
GCC & GNU make | программирование в UNIX | графические библиотеки | Tcl | Perl | PHP | Java & C# | СУБД | CVS | прочее

# Ядро
# Мультимедиа
# Интернет
# Почта
# Безопасность
# Железо
# Разное

# Linux HowTo (как сделать)
# Книги и руководства
# Материалы на английском языке


MySQL The World's Most Popular Open Source Database # Online shop | Site map |  
CompanyProductsSupport & ConsultingTraining & CertificationDownloadsDocumentation
  BooksArticlesMailing ListsPresentationsOther Sites  
Search the MySQL manual:
MySQL Manual
  • 2 Установка MySQL
    • 2.3 Установка исходного дистрибутива MySQL
      • 2.3.1 Обзор быстрой установки
      • 2.3.2 Применение патчей
      • 2.3.3 Типичные опции configure
      • 2.3.4 Установка из экспериментального набора исходных кодов
      • 2.3.5 Проблемы с компиляцией?
      • 2.3.6 Замечания по потокам MIT-pthreads
      • 2.3.7 Дистрибутив исходного кода для Windows

Buy this Reference Manual in softcover from Barnes & Noble!

MySQL Reference Manual
Previous / Next / Up / Table of Contents

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).

User Comments

Posted by Juan Domingo Bossio on Wednesday September 25 2002, @10:44am[Delete] [Edit]

We are compiling MySql 3.23.51 into Sun OS 5.6.
We use gtar and gmake...
Why but make report this:
NU Make version 3.76.1, by Richard Stallman and
Roland McGrath.
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96,
97
Free Software Foundation, Inc.
This is free software; see the source for copying
conditions.
There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

Report bugs to <[email protected]>.

Reading makefiles...
Reading makefile `Makefile'...
make[1]: Entering directory `/opt/mysql/mysql-
3.23.52/include'
Makefile:340: *** missing separator. Stop.
make[1]: Leaving directory `/opt/mysql/mysql-
3.23.52/include'
Got a SIGCHLD; 1 unreaped children.
Live child 0x0004ea48 PID 4829
Reaping losing child 0x0004ea48 PID 4829
make: *** [linked_include_sources] Error 2
Removing child 0x0004ea48 PID 4829 from chain.

Posted by Netdrag on Monday December 9 2002, @3:23pm[Delete] [Edit]

On the net, i found a lot of questions because of
gethostbyname_r errors, when trying to compile
mysql from source. Try to edit your config.h file and
enter:

#define HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE
1

if not defined.
With that and gcc 2.95.5 as CC and CXX, i compiled
on Debian 3.0

Posted by Wolfram Klaъ on Friday February 28 2003, @11:55am[Delete] [Edit]

Ich habe bestimmt einige Wochen und zigmal versucht, mysql zu compilieren. Immer wieder kam bei make die gleiche Fehlermeldung:
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
make[2]: Leaving directory `/install/src/mysql-3.23.55/libmysql'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/install/src/mysql-3.23.55'
make: *** [all-recursive-am] Error 2

Duch einen Zufall habe ich festgestellt, dass nach der Installation des RPM-Paketes 'gcc-c++' diese Meldungen endlich nicht mehr auftauchten. Alles klappt wunderbar.
Ich nutze Suse Linux 8.1.

Add your own comment.

Top / Previous / Next / Up / Table of Contents
# MySQL.com home | Site map | Contact us | Press | Jobs | Privacy policy | Trademark info | © 1995-2003 MySQL AB. All rights reserved.