スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MySQL 5.5.xのソースからのビルド失敗例

ネットでも同様の例はありつつも、解決策を記述しているところはなかったので紹介しておきます。

LinuxでソースからMySQL 5.5.xをビルドしたときに、
環境変数の設定によってはビルドに失敗してしまいます。
具体的には、「C_INCLUDE_PATH」を設定していると、以下のようなエラーになります。


[ 0%] Built target INFO_BIN
[ 0%] Built target INFO_SRC
[ 0%] Built target abi_check
[ 2%] Built target zlib
[ 7%] Built target readline
[ 8%] Built target mysqlservices
[ 15%] Built target strings
[ 31%] Built target mysys
[ 31%] Built target dbug
[ 31%] Built target comp_err
[ 31%] Built target GenError
[ 31%] Built target blackhole
[ 31%] Built target example
[ 32%] Built target csv
[ 46%] Built target innobase
[ 46%] Built target archive
[ 47%] Built target federated
[ 51%] Built target heap
[ 51%] Built target hp_test1
[ 51%] Built target hp_test2
[ 59%] Built target myisam
[ 60%] Built target myisam_ftdump
[ 60%] Built target myisamchk
[ 60%] Built target myisamlog
[ 61%] Built target myisampack
[ 65%] Built target perfschema
[ 65%] Built target mytap
[ 65%] Built target pfs-t
[ 65%] Built target pfs_instr-oom-t
[ 65%] Built target pfs_instr-t
[ 65%] Built target pfs_instr_class-oom-t
[ 66%] Built target pfs_instr_class-t
[ 69%] Built target myisammrg
[ 69%] Built target auth
[ 69%] Built target auth_socket
[ 69%] Built target auth_test_plugin
[ 69%] Built target qa_auth_client
[ 69%] Built target qa_auth_interface
[ 69%] Built target qa_auth_server
[ 70%] Built target semisync_master
[ 70%] Built target semisync_slave
[ 71%] Built target audit_null
[ 71%] Built target daemon_example
[ 71%] Built target ftexample
[ 72%] Built target vio
[ 73%] Built target regex
[ 73%] Built target thr_lock
[ 73%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/client.c.o
/usr/local/src/mysql-5.5.22/sql-common/client.c:1936: error: ‘cli_list_fields’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c:1937: error: ‘cli_read_prepare_result’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c:1938: error: ‘cli_stmt_execute’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c:1939: error: ‘cli_read_binary_rows’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c:1940: error: ‘cli_unbuffered_fetch’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c:1942: error: ‘cli_read_statistics’ undeclared here (not in a function)
/usr/local/src/mysql-5.5.22/sql-common/client.c: In function ‘cli_read_query_result’:
/usr/local/src/mysql-5.5.22/sql-common/client.c:3807: 警告: implicit declaration of function ‘handle_local_infile’
make[2]: *** [libmysql/CMakeFiles/clientlib.dir/__/sql-common/client.c.o] エラー 1
make[1]: *** [libmysql/CMakeFiles/clientlib.dir/all] エラー 2
make: *** [all] エラー 2



エラー内容としてはMySQL内で利用されている共通関数定義が見つからず、エラーになっている感じです。なので、無理矢理インクルードファイルの相対パスを指定するように修正するとコンパイルまでは通るのですが、結局リンクに失敗します。

このエラー、正確には「C_INCLUDE_PATH」に「コロン(:)」が含まれていると失敗するようで、例えば以下のように「C_INCLUDE_PATH」が定義されていると失敗しません。

export C_INCLUDE_PATH=/usr/local/include

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include


とはいえ、普段から環境変数に「C_INCLUDE_PATH」や「LD_LIBRARY_PATH」などを設定しておくのはよくない習慣とされていますので、最初から設定しておかないに限ります。

MySQL 5.5.xに限らず、同じような例はいくつかあるようなので、もし同じようなエラーが発生した場合は「C_INCLUDE_PATH」を疑ってみるといいかも知れません。
スポンサーサイト

git-daemon (gitプロトコル)におけるcloneエラー

git-daemonをVPSサーバへ構築する際に少しハマったので
こちらへ紹介しておきます。

通常、Linuxでよくつかわれるアプリやライブラリのインストール先は /usr/local だと思うのですが、ソースファイルからインストールしたときなどに別の場所へインストールしたいという場合もあるかと思います。

この場合に注意しなければならないのが、
gitをコンパイルするときのzlibのバージョンです。

CentOS 5.7だとデフォルトのzlibのバージョンが1.2.3なのですが、このバージョンのzlibをコンパイル時にリンクすると、git-daemonコマンドを実行した際に「/lib/libz.so.1: no version information available」といった警告が発生します。

gitコマンドそのものはこの警告が発生しても動くのですが、git-daemonを動かしている際に、コンソールに余計な文字列が出力されるとgitプロトコルによるcloneに失敗するようで、クライアント側で「fatal: protocol error: bad line length character: git-」といったエラーメッセージが出力されてcloneに失敗します。

これを解決するには、サーバ側のgitをコンパイルする際にリンクするzlibのバージョンを1.2.5以降にする必要があります。具体的には、gitのコンパイル時のオプション指定で

./configure --prefix=/opt/git/git-1.7.7 --with-zlib=/opt/zlib/zlib-1.2.5


このように1.2.5のzlibの場所を明示してあげれば、git-daemon実行時に警告が発生しなくなりますので、gitプロトコルによるcloneも問題なく成功するようになります。


サーバ側の.bashrcなどに余計なechoがあるとgit-daemonに失敗するというの話は聞いたことがありましたが、まさか警告が出ているだなんてなかなか気づきませんでした。(というのも、rootユーザでgit-daemonを実行した際は何も警告が発生せず、git-daemon用に作成したユーザで実行すると警告が発生していましたので、rootでインストール作業をすることが多いと中々気付けないですね)

サーバで試しにgit-daemonを動かす際も、

sudo -u gituser git daemon --export-all


といったように、ユーザを明示してから実行してみた方がいいですね。(って、これが当たり前なのですが…)
プロフィール

Kou

Author:Kou
モバイル関連の開発ばかりやってる人のブログです。たまにWebもやります。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。