2012-07-31 10 views
11

sto cercando di utilizzare la libreria BFD, e così ho installato il pacchetto binutils-dev e hanno incluso:binutils/bfd.h vuole config.h ora?

#include <bfd.h> 

e sto chiamando bfd_openr e bfd_close e così via dal mio codice.

pacchetti Recentemente ho aggiornato e ora ho un errore da qui:

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 

... che devo includere config.h - ma non sto usando autoconf.

sono io compreso il file di intestazione sbagliata? Come dovresti usare binutils-dev?

Ecco un programma demo:

#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; 
} 

tenta di compilare ed eseguire il seguente:

$ 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

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

risposta

9

Beh, il modo più corretto di utilizzare l'intestazione è quella di utilizzare autotools nel pacchetto come bene. Alcune persone sono semplicemente testarde e non penso che tu possa fare molto.

Un'alternativa è quella di lavorare intorno al controllo, definendo le macro si sta usando:

#define PACKAGE 1 
#define PACKAGE_VERSION 1 

Naturalmente, se si sta già definendo quelli, si può anche li impostato su alcuni valori ragionevoli come :

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

e usarli per il programma. Normalmente userai comunque qualcosa del genere per mantenere coerenti le versioni.

Questo dovrebbe essere sufficiente se si utilizza un compilatore conforme agli standard perché la macro __STDC__ verrà dichiarata e tutto andrà bene. Bene, fino a quando le intestazioni che stai usando non richiederanno più definizioni generate da autoconf.

Ad esempio, se si voleva utilizzare plugin-api.h, si sarebbe in realtà deve gestire il controllo di stdint.h e inttypes.h ...

Problemi correlati