すべての MySQL プログラムの gcc による Solaris あるいは Linux のコンパイルは警告なしのクリーンな形で行われます。ほかのシステムは、システムに含まれるファイルの違いによって警告が出る場合もあります。MIT-pthreads を使用した場合の警告については 項2.10.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++
に関連したコンパイル中にも問題が起こる場合もあります。
これらの問題の 1 つに
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.4. 「米国 Sun Microsystems, Inc. がコンパイルした 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
オプションで実行し、次にコンパイルして新しいクライアントライブラリにリンクします。MySQL
Internals: Porting を参照してください。
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 再度実行します。