0

メインプログラムが作成中のライブラリ内の関数を使用できるように、ライブラリを C プログラムにリンクしようとしていますが、エラーが発生します。

これは私のライブラリ コードの一部です (このファイルを lib.c と呼びます):

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

static void doDump ( bfd *abfd )
{
    printf (_("\n%s:     file format %s\n"), bfd_get_filename (abfd), abfd->xvec->name);
    doHeaders ( abfd );
}

これが私のメイン プログラムです (このファイルを main.c と呼びます):

#include "bfd.h"

static void getFile ( char *filename, char *target )
{
    bfd *file;
    file = bfd_openr (filename, target);
    doDump (file);
    bfd_close (file);
}

int main (int argc, char **argv)
{
    char *target = NULL;
    bfd_init ();
    getFile ("a.out", target);
}

これらは、ライブラリをリンクするために実行するコマンドです。

cc -Wall -c lib.c

ar -cvq libdata.a lib.o

cc -o mainprog main.c lib.a -lbfd

ただし、次のエラーが発生します。

doDump への未定義の参照

次の行を指しています:

doDump (ファイル);

私は何を間違っていますか?

ありがとう

4

2 に答える 2

5

lib.c で doDump を として定義しましたstatic。これは、そのファイルの外では見えないことを意味します。staticキーワードを削除すると、問題は解決するはずです。

于 2013-02-12T20:38:07.227 に答える
1

と宣言doDumpしたためstatic、メインプログラムでは「表示」されません。修飾子を削除し、 (または他のヘッダーで)static有効な宣言を提供します。main.c

extern void doDump(bfd * file);

static void getFile ( char *filename, char *target )
{
    bfd *file;
    file = bfd_openr (filename, target);
    doDump (file);
    bfd_close (file);
}
于 2013-02-12T20:39:08.250 に答える