すべての MySQL プログラムの gcc による Solaris あるいは Linux のコンパイルは警告なしのクリーンな形で行われます。他のシステムは、システムに含まれるファイルの違いによって警告が出る場合もあります。MIT-pthreads を使用した場合の警告については 項2.9.5. 「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
問題は gcc が
sql_yacc.cc
をインライン機能でコンパイルするには非常に大きなメモリが必要だということです。configure
を--with-low-memory
オプションで実行してみます。
shell> ./configure --with-low-memory
このオプションはgcc
を使用しているときには
-fno-inline
をコンパイル行に追加し、何か他のものを使用している場合には-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++
コンパイラが機能しなかったまさにその理由が書いてあるはずです。これらの問題を回避するには、gcc
を C++
コンパイラとして使用します。環境変数を
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
の環境変数に追加します。environment
variables.コンパイラ名もこのように
CC
および CXX
を使用して指定できます。.例えば、
shell>CC=gcc
shell>CFLAGS=-O3
shell>CXX=gcc
shell>CXXFLAGS=-O3
shell>export CC CFLAGS CXX CXXFLAGS
様々なシステムで有効性が確認されているフラグのリストは、項2.1.2.5. 「MySQL AB でコンパイルした MySQL バイナリ」 を参照してください。
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
がconfig.h
を生成しますので、configure
を実行するたびにこれを行います。)
sql_yacc.cc
ファイルはsql_yacc.yy
から生成されます。.通常は、ビルド
プロセスは sql_yacc.cc
を作成する必要はありません。というのは、MySQL
は事前に生成されたコピーがあるからです。しかし、それを再度作成する必要がある場合、この問題に遭遇する場合もあります。
"sql_yacc.yy", line xxx
fatal: default action causes potential...
これは yacc のバージョンに問題があることを意味しています。bison (yacc の GNU バージョン) をインストールし、代わりにそれを使用する場合もあります。
Linux 3.0 のDebian では、デフォルトの
mawk
の代わりに
gawk
をインストールする必要があります。
mysqld あるいは MySQL
クライアントのデバッグの必要がある場合、configure
を --with-debug
オプションで実行し、次にコンパイルして新しいクライアント
ライブラリにリンクします。Debugging a MySQL Client
参照。
Linux (例えば、SuSE Linux 8.1 あるいは Red Hat Linux 7.3) のコンパイルで以下のようなエラーが発生した場合、多分g++ がインストールされていません。
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
デフォルトでは、configure スクリプトが g++ (GNU C++ コンパイラ) を使用して引数の正しい数字を決めようとします。g++ がインストールされていないとこのテストでは正しい結果は出ません。この問題を回避する 2 つの方法があります。
GNU C++ g++
がインストールされていることを確認してください。Linux
のディストリビューションでは、必要なパッケージは
gpp
を呼ばれており、他では
gcc-c++ となります。
CXX
環境変数を
gcc に設定して
gcc を C++
コンパイラとして使用します。
export CXX="gcc"
それらのいずれかの変更を加えた後に configure 再度実行します。