2012-07-31 15 views
11

estoy tratando de utilizar la biblioteca de BFD, y por eso me he instalado el paquete binutils-dev y han incluido:binutils/bfd.h quiere config.h ahora?

#include <bfd.h> 

y estoy llamando bfd_openr y bfd_close y así sucesivamente de mi código.

paquetes y recientemente he actualizado ahora me sale un error de aquí:

bfd.h:

/* PR 14072: Ensure that config.h is included first. */ 
#if !defined PACKAGE && !defined PACKAGE_VERSION 
#error config.h must be included before this header 
#endif 

... que deba incluir config.h - pero no estoy usando autoconf.

¿Estoy incluyendo el archivo de encabezado incorrecto? ¿Cómo se supone que debes usar binutils-dev?

Aquí es un programa de demostración:

#include <stdio.h> 
#include <bfd.h> 

int main() 
{ 
    bfd_init(); 

    bfd* file = bfd_openr("a.out", 0); 

    if (!file) 
     return -1; 

    if (bfd_check_format(file, bfd_object)) 
     printf("object file\n"); 
    else 
     printf("not object file\n"); 

    bfd_close(file); 

    return 0; 
} 

intento para compilar y ejecutar la siguiente manera:

$ sudo apt-get install binutils-dev 
$ gcc test.c 
In file included from test.c:3:0: 
/usr/include/bfd.h:37:2: error: #error config.h must be included before this header 
+1

relacionadas: http://sourceware.org/bugzilla/show_bug.cgi?id= 14243 – cnicutar

Respuesta

9

Bueno, la forma más correcta de utilizar el encabezado es usar autotools en su paquete como bien. Algunas personas son simplemente tercas y no creo que puedas hacer mucho al respecto.

Una alternativa es trabajar-en torno a la comprobación, mediante la definición de las macros que está utilizando:

#define PACKAGE 1 
#define PACKAGE_VERSION 1 

Por supuesto, si ya está definiendo esos, es posible que así los puso a algunos valores razonables como :

#define PACKAGE "your-program-name" 
#define PACKAGE_VERSION "1.2.3" 

y úselos para su programa. Por lo general, siempre utilizará algo así en algún momento para mantener las versiones consistentes.

Esto debería ser suficiente si está utilizando un compilador que cumpla con los estándares, porque entonces se declarará la macro __STDC__ y todo funcionará perfectamente. Bueno, siempre y cuando los encabezados que estés utilizando no requieran más definiciones autoconf generadas.

Por ejemplo, si desea utilizar plugin-api.h, usted realmente tiene que manejar la comprobación de stdint.h y inttypes.h ...

Cuestiones relacionadas