Pregunta ¿Dónde busca Ruby el método have_header para los archivos de encabezado?


En una caja de CentOS 5.7, tengo problemas para instalar la versión más nueva de la gema mysql2; no está encontrando 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 ***

Los archivos de encabezado de mysql existen en / usr / include / mysql. Existe una versión anterior de la gema en el servidor, por lo que debe haberse construido con éxito en un punto.

Tenga en cuenta que falla en una comprobación de mysql.h, pero tiene éxito en mysql / mysql.h. Sin embargo, no se repite esto para errmsg.h. Con esto, supongo que no está mirando / usr / include, pero no estoy seguro.

Busqué en el código fuente extconf.rb y descubrí que está usando el have_header método para localizar los archivos de encabezado. Depuré la ejecución para descubrir que está buscando una ruta relativa de "mysql / errmsg.h". Pero no he encontrado ninguna documentación que explique cómo se expande en una ruta absoluta.

¿Dónde y cómo tiene have_header sus archivos de encabezado?


5
2018-06-16 23:42


origen


Respuestas:


Creo que encontré una respuesta.

Parece que have_header mira el sistema incluye ruta. Si las variables de entorno relevantes no están establecidas, las rutas de inclusión predeterminadas son /usr/local/include y /usr/include.

Si quieres configurarlos manualmente, harías algo como:

export C_INCLUDE_PATH=/usr/include/mysql/

Eso es cierto incluso si está compilando un programa C ++, si el archivo de encabezado es un archivo C. Si, por otro lado, su archivo de encabezado es C ++, no C, lo haría:

export CPLUS_INCLUDE_PATH=/usr/include/mysql

Por supuesto, usted encontró la solución, que es incluir dir_config('mysql') en tus extconf.rb. Eso le permite usar el --with-mysql-include Opción y suministro de la ruta de forma manual.

Aquí está mi fuente: http://www.network-theory.co.uk/docs/gccintro/gccintro_23.html

Y aquí hay una versión más general de la misma pregunta (con respuestas): ¿Cómo agregar una ruta de inclusión predeterminada para gcc en linux?


12
2017-08-27 19:01