在C中链接库,未识别的参考

时间:2013-02-12 20:35:39

标签: c gcc

我正在尝试将库链接到我的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(文件);

我做错了什么?

由于

2 个答案:

答案 0 :(得分:5)

您已在lib.c中将doDump定义为static。这意味着它在该文件之外是不可见的。删除static关键字,问题应该消失。

答案 1 :(得分: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);
}