5

CentOS 5.7 ボックスで、mysql2 gem の最新バージョンをインストールできません。errmsg.h が見つかりません:

/usr/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... no
checking for mysql_query() in -lmysqlclient... yes
checking for mysql.h... no
checking for mysql/mysql.h... yes
checking for errmsg.h... no
-----
errmsg.h is missing.  please check your installation of mysql and try again.
-----
*** extconf.rb failed ***

mysql ヘッダー ファイルは /usr/include/mysql にあります。古いバージョンの gem がサーバーに存在するため、ある時点で正常にビルドされている必要があります。

mysql.h のチェックでは失敗しますが、mysql/mysql.h では成功することに注意してください。ただし、errmsg.h についてはこれを繰り返しません。これにより、/usr/include を見ていないと推測していますが、よくわかりません。

extconf.rb のソース コードを調べたところ、このhave_headerメソッドを使用してヘッダー ファイルを見つけていることがわかりました。実行をデバッグして、「mysql/errmsg.h」の相対パスを探していることを確認しました。しかし、それを絶対パスに展開する方法を説明するドキュメントは見つかりませんでした。

have_header はヘッダー ファイルをどこでどのように見つけますか?

4

1 に答える 1

13

私は答えを見つけたと信じています。

have_headerシステム インクルード パスを見ているようです。関連する環境変数が設定されていない場合、デフォルトのインクルード パスは/usr/local/include/usr/includeです。

手動で設定したい場合は、次のようにします。

export C_INCLUDE_PATH=/usr/include/mysql/

これは、ヘッダー ファイルが C ファイルであれば、C++ プログラムをコンパイルしている場合でも当てはまります。一方、ヘッダー ファイルが C ではなく C++ の場合は、次のようにします。

export CPLUS_INCLUDE_PATH=/usr/include/mysql

もちろん、あなたは回避策を見つけましdir_config('mysql')extconf.rb。これにより、--with-mysql-includeオプションを使用してパスを手動で指定できます。

ここに私の情報源があります: http://www.network-theory.co.uk/docs/gccintro/gccintro_23.html

そして、これが同じ質問のより一般的なバージョンです(回答付き):Linuxでgccのデフォルトのインクルードパスを追加するにはどうすればよいですか?

于 2012-08-27T19:01:32.840 に答える