CentOS6にMySQL4.0.27を入れようとしたがmakeでエラーが出た。
CentOS6.2にMySQL4.0.27入れようとしたんですけど
mysql.cc: In function ‘void print_table_data(MYSQL_RES*)’: mysql.cc:1650: error: expected primary-expression before ‘?’ token mysql.cc:1650: error: expected ‘:’ before ‘)’ token mysql.cc:1650: error: expected primary-expression before ‘)’ token mysql.cc:1652: error: expected primary-expression before ‘?’ token mysql.cc:1652: error: expected ‘:’ before ‘)’ token mysql.cc:1652: error: expected primary-expression before ‘)’ token mysql.cc:1666: error: expected primary-expression before ‘?’ token mysql.cc:1666: error: expected ‘:’ before ‘)’ token mysql.cc:1666: error: expected primary-expression before ‘)’ token make[2]: *** [mysql.o] Error 1 make[2]: Leaving directory `/root/mysql-4.0.27/client' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/mysql-4.0.27'
こんなようなエラーがでまして
via
katsuji's tech note: FreeBSD 7.0 と MySQL 4.0.x
gcc 3.4 じゃないといけないのか。
# gcc -dumpversion でバージョンを確認したら 4.4.7ってなっておりました。
gcc34 をいれる
と切り替える方法はあるみたいです
ここを参考に3.4をいれて
# yum install compat-gcc-34 compat-gcc-34-c++
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc34 34 # update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc 44 versionをかえる # update-alternatives --config gcc # update-alternatives --install /usr/bin/gcc++ gcc++ /usr/bin/gcc++34 34 # update-alternatives --install /usr/bin/gcc++ gcc++ /usr/bin/gcc++ 44 versionをかえる # update-alternatives --config gcc++
これではうまく行きませんでした。
# gcc -dumpversion でバージョンを確認したら 4.4.7ってなってたので多分切り替わっていない。 他のやり方を探します。
makefaile を3.4を見に行くように編集 しようと思ったけどめんどうそうなのでやめた
makefaileを編集してgcc34を見るようにします。
make[4]: Entering directory `/root/mysql-4.0.27/sql' if <b>g++</b> -DMYSQL_SERVER -DDEFAULT_MYSQL_HOME="\"/usr/local/mysql\"" -DDATADIR="\"/usr/local/mysql/var\"" -DSHAREDIR="\"/usr/local/mysql/share/mysql\"" -DHAVE_CONFIG_H -I. -I. -I.. -I../innobase/include -I./../include -I./../regex -I. -I../include -I. -O3 -DDBUG_OFF -fno-implicit-templates -fno-exceptions -fno-rtti -MT sql_lex.o -MD -MP -MF ".deps/sql_lex.Tpo" -c -o sql_lex.o sql_lex.cc; \ then mv -f ".deps/sql_lex.Tpo" ".deps/sql_lex.Po"; else rm -f ".deps/sql_lex.Tpo"; exit 1; fi
とかのエラーが出るので都度Makefileのg++の実行パスを直せばいいっぽい
/root/mysql-4.0.27/client/Makefile の194行目とか CXX = /usr/bin/g++34
他も出るたびに対処しようと思ったんですがもっといい案がありました。
ちなみにこれやっておかないとエラーがでるのでやっておきます。
守破離でいこう!!: MySQL 3.23.58 を CentOS 5.2 にインストールする
# vi mysys/my_thr_init.c 変更箇所(「/my_fast_mutexattr」← viの検索コマンドで検索したら見つかる) ↓---------------------------------- #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP pthread_mutexattr_t my_fast_mutexattr; #endif ↓このようにコメントアウト↓ //#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP pthread_mutexattr_t my_fast_mutexattr; //#endif ------------------------------------↑
ソースビルド時に「CC=/usr/bin/gcc34 CXX=/usr/bin/g++34」をつければOK
ここを参考に「CC=/usr/bin/gcc34 CXX=/usr/bin/g++34」ってな感じでgccたちの実行パスを渡してあげることが出来る模様
MySQL :: MySQL 4.1 リファレンスマニュアル :: 2.3.3 一般的な configure オプション
CC=/usr/bin/gcc34 CXX=/usr/bin/g++34 \ ./configure \ --prefix=/usr/local/mysql \ --with-charset=ujis \ --with-extra-charsets=all \ --with-mysqld-usr=mysql \ --with-innodb \ --enable-local-infile \ --with-unix-socket-path=/tmp/mysql.sock \ --with-named-thread-libs="-lpthread" # make # make install
okともNGとも言われておらず 最後の辺の行が
test -z "/usr/local/mysql/share/mysql" || mkdir -p -- "/usr/local/mysql/share/mysql" /usr/bin/install -c 'mysql.server' '/usr/local/mysql/share/mysql/mysql.server' make[3]: Leaving directory `/root/mysql-4.0.27/support-files' make[2]: Leaving directory `/root/mysql-4.0.27/support-files' make[1]: Leaving directory `/root/mysql-4.0.27/support-files'
ってメッセージを残して終了したけど成功っぽい気がする。
とりあえず、エラーはでてないのでね。
これけっこう解決するまで大変でした。