Trên hộp CentOS 5.7, tôi gặp sự cố khi cài đặt phiên bản mới nhất của đá quý mysql2; không tìm thấy errmsg.h:Phương thức has_header của Ruby tìm kiếm các tệp tiêu đề ở đâu?
/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 ***
Tệp tiêu đề mysql tồn tại tại/usr/include/mysql. Một phiên bản cũ của gem tồn tại trên máy chủ, vì vậy nó phải được xây dựng thành công tại một thời điểm.
Lưu ý rằng nó không thành công khi kiểm tra mysql.h, nhưng thành công trên mysql/mysql.h. Tuy nhiên, nó không lặp lại điều này cho errmsg.h. Bởi điều này tôi đoán rằng nó không nhìn vào/usr/include, nhưng tôi không chắc chắn.
Tôi đã đào vào mã nguồn extconf.rb và phát hiện ra rằng nó đang sử dụng phương thức have_header
để định vị tệp tiêu đề. Tôi gỡ lỗi thực hiện để tìm ra rằng nó đang tìm kiếm một đường dẫn tương đối của "mysql/errmsg.h". Nhưng tôi đã không tìm thấy bất kỳ tài liệu nào giải thích cách nó mở rộng nó thành một đường dẫn tuyệt đối.
Nơi & cách has_header định vị tệp tiêu đề của nó?
FWIW, tôi bỏ qua các vấn đề thực tế bằng cách bao gồm '--with-mysql-include =/usr/include/mysql' trong lệnh gem instal. Nó vẫn sẽ được tốt đẹp để có một câu trả lời cho câu hỏi này mặc dù. –