Cómo saber si se usa glibc


Estoy tratando de implementar la funcionalidad backtrace para un marco grande, que se utiliza para diferentes plataformas y OS'es. En algunos de ellos, está vinculado contra glibc, mientras que en el otro, algo diferente (por ejemplo. uclibc). la función backtrace() solo existe en la primera.

¿Hay alguna forma de saber si se usa glibc? Cualquier #define? No pude encontrar una respuesta en el manual de glibc. Sé que no puedo tener información de tiempo de enlace durante la compilación, pero supongo que incluir archivos tengo que diferir. Al menos el backtrace tiene que ser declarado en alguna parte. Me gustaría comprobarlo sin tener que pasar banderas explícitas al compilador.

 23
Author: Fred Nurk, 2010-11-24

3 answers

Hay la #define __GNU_BIBLIOTECA__, __GLIBC__ y __GLIBC_MENOR de edad__ (6, 2 y 11 en mi sistema con glibc-2.11) en características.h.

 21
Author: Gunther Piez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 11:57:57

Incluye características.h, contiene las macros que necesita, por ejemplo,

#define __GNU_LIBRARY__ 6

/* Major and minor version number of the GNU C library package.  Use
   these macros to test for features in specific releases.  */
#define __GLIBC__       2
#define __GLIBC_MINOR__ 4
 30
Author: Erich Kitzmueller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 11:58:08

Comprobar las macros del preprocesador es no una buena solución. uClibc y posiblemente otras implementaciones de libc definen macros para imitar glibc (sin proporcionar toda su funcionalidad hinchada) por las mismas razones que todos los navegadores incluyen "Mozilla" en sus cadenas de Agente de Usuario: programas rotos que esperan ver glibc y desactivan muchas características si no lo ven.

En su lugar, debe escribir un script de configuración para sondear backtrace y usarlo solo si es disponible.

 3
Author: R..,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 16:28:18