2012-07-31 11 views
11

Ich versuche, die BFD-Bibliothek zu verwenden, und so habe ich installiert Paket binutils-dev und waren unter anderem:binutils/bfd.h will config.h jetzt?

#include <bfd.h> 

und bfd_openr und bfd_close nenne und so weiter von meinem Code.

Vor kurzem habe ich eine Upgrade-Pakete und jetzt bekomme ich einen Fehler von hier:

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 

... dass ich config.h enthalten soll - aber ich bin nicht mit autoconf.

Enthalte ich die falsche Header-Datei? Wie soll man binutils-dev benutzen?

Hier ist ein Demo-Programm:

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

versuchen zu kompilieren und auszuführen, wie folgt:

$ 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

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

Antwort

9

Nun, die meisten richtigen Weg, um den Header zu verwenden, ist Autotools in Ihrem Paket zu verwenden, wie Gut. Manche Leute sind einfach stur und ich glaube nicht, dass Sie viel dagegen tun können.

Eine Alternative ist die Arbeit-um die Überprüfung, indem Sie die Makros definieren, es verwendet:

#define PACKAGE 1 
#define PACKAGE_VERSION 1 

Natürlich sind, wenn Sie bereits diejenigen definieren, können Sie auch sie auf einige vernünftige Werte wie :

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

und verwenden Sie sie für Ihr Programm. Normalerweise werden Sie irgendwann so etwas verwenden, um die Versionen konsistent zu halten.

Das sollte ausreichen, wenn Sie einen standardkonformen Compiler verwenden, weil dann das __STDC__ Makro deklariert wird und alles gut geht. Nun, solange die Header, die Sie verwenden, nicht mehr autoconf-generierte Definitionen benötigen.

Zum Beispiel, wenn Sie plugin-api.h nutzen wollten, würden Sie tatsächlich für stdint.h Überprüfung handhaben müssen und inttypes.h ...