15

私はBFDライブラリを使用しようとしているので、パッケージをインストールbinutils-devして含めました:

#include <bfd.h>

私のコードからなどを呼び出しbfd_openrています。bfd_close

最近、パッケージをアップグレードしましたが、ここからエラーが発生します。

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

...含める必要がありますconfig.h-しかし、私はautoconfを使用していません。

間違ったヘッダー ファイルをインクルードしていませんか? binutils-dev はどのように使用するのですか?

ここにデモプログラムがあります:

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

次のようにコンパイルして実行してみてください。

$ 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
4

1 に答える 1

14

ヘッダーを使用する最も正しい方法は、パッケージでも autotools を使用することです。単に頑固な人もいますが、あなたにはどうすることもできないと思います。

別の方法として、チェックが使用しているマクロを定義することで、チェックを回避することができます。

#define PACKAGE 1
#define PACKAGE_VERSION 1

もちろん、すでにそれらを定義している場合は、次のような適切な値に設定することもできます。

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

そしてそれらをあなたのプログラムに使用してください。バージョンの一貫性を維持するために、通常は何らかの時点でそのようなものを使用します。

標準準拠のコンパイラを使用している場合は、これで十分なはずです。__STDC__マクロが宣言され、すべてがうまくいくからです。まあ、使用しているヘッダーが autoconf によって生成された定義をさらに必要としない限り。

たとえば、を使用したい場合plugin-api.h、実際にはチェックを処理する必要がstdint.hありinttypes.hます...

于 2012-07-31T20:59:41.087 に答える