無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 2 MySQL のインストールと更新 :: 2.9 ソースのディストリビューションを使用した MySQL のインストール :: 2.9.4 MySQL のコンパイルに関する問題
« 2.9.3 開発ソース ツリーからのインストール

2.9.5 MIT-pthreads ノート »
Section Navigation      [Toggle]
  • 2.9 ソースのディストリビューションを使用した MySQL のインストール
  • 2.9.1 ソースのインストール概要
  • 2.9.2 典型的な configure オプション
  • 2.9.3 開発ソース ツリーからのインストール
  • 2.9.4 MySQL のコンパイルに関する問題
  • 2.9.5 MIT-pthreads ノート
  • 2.9.6 Windows にソースから MySQL をインストールする
  • 2.9.7 Windows で MySQL クライアントをコンパイルする

2.9.4. MySQL のコンパイルに関する問題

すべての 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 再度実行します。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.