読者です 読者をやめる 読者になる 読者になる

purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

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'

ってメッセージを残して終了したけど成功っぽい気がする。
とりあえず、エラーはでてないのでね。

これけっこう解決するまで大変でした。