在 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 在哪里以及如何定位其头文件?