2012-06-16 13 views
5

Na pudełku CentOS 5.7 mam problem z instalacją najnowszej wersji klejnotu mysql2; to nie jest znalezienie errmsg.h:Gdzie metoda has_header Rubiego szuka plików nagłówkowych?

pliki nagłówkowe
/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 istnieje w katalogu/usr/include/mysql. Starsza wersja klejnotu istnieje na serwerze, więc musiała zostać pomyślnie zbudowana w jednym punkcie.

Zauważ, że nie sprawdza się przy mysql.h, ale kończy się na mysql/mysql.h. Jednak nie powtórzy tego dla errmsg.h. Zgaduję, że to nie patrzy na/usr/include, ale nie jestem pewien.

Wkopałem się w kod źródłowy extconf.rb i odkryłem, że do znalezienia plików nagłówkowych używa się metody have_header. Debugowałem wykonanie, aby dowiedzieć się, że szuka względnej ścieżki "mysql/errmsg.h". Ale nie znalazłem żadnej dokumentacji wyjaśniającej, w jaki sposób rozszerza to na absolutną ścieżkę.

Gdzie 01/w jaki sposób has_header zlokalizować swoje pliki nagłówkowe?

+1

FWIW, wyprowadziła rzeczywisty problem w tym '--with-mysql-include =/usr/include/mysql' w poleceniu instalacji gem. Byłoby jednak przyjemnie mieć odpowiedź na to pytanie. –

Odpowiedz

12

Wierzę, że znalazłem odpowiedź.

Wygląda na to, że have_header wygląda na ścieżce zawierającej system. Jeśli odpowiednie zmienne środowiskowe nie są ustawione, domyślne ścieżki dostępu to /usr/local/include i /usr/include.

Jeśli chcesz ustawić je ręcznie, byś zrobił coś takiego:

export C_INCLUDE_PATH=/usr/include/mysql/ 

To prawda nawet jeśli kompilacji programu C++, jeśli plik nagłówka jest plik C. Jeśli, z drugiej strony, plik nagłówka jest C++, a nie C, zrobiłbyś:

export CPLUS_INCLUDE_PATH=/usr/include/mysql 

oczywiście, okazało się, że obejście, które ma zawierać dir_config('mysql') w swoim extconf.rb. Dzięki temu można użyć opcji --with-mysql-include i ręcznie podać ścieżkę.

Oto moje źródło: http://www.network-theory.co.uk/docs/gccintro/gccintro_23.html

A oto bardziej ogólnego wersja tego samego pytania (z odpowiedziami): How to add a default include path for gcc in linux?

+1

Uwaga: Ostatnio odkryłem, że 'dir_config' działa tylko niekonsekwentnie. Może działać z mysql, ale nie z ATLAS z jakiegoś powodu. –

+0

Dziękuję, to bardzo mi pomogło –

Powiązane problemy