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

因为您已经声明它在您的主程序doDumpstatic不会“可见”。删除限定符并在您的(或其他一些标题)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 回答