c - 自由 : Undefined Reference for functions

标签 c undefined-reference

我正在尝试使用 Libelf 库来获取有关某些 elf 文件的一些信息。但我不断收到这些“对 [...] 的 undefined reference ”。我从 synaptic 安装了 libelf(也试图从网站上获取),并且 lib 似乎安装正常。

我的代码:

#include <err.h>
#include <fcntl.h>
#include <sysexits.h>
#include <unistd.h>

#include <stdio.h>
#include <stdlib.h>
#include <libelf.h>

int main(int argc, char * argv[]) {
    Elf *elf_file;
    Elf_Kind  elf_kind_file;
    int file_descriptor;

    if((argc!=2)) 
        printf("Argumento em formato nao esperado\n");

    file_descriptor = open(argv[1], O_RDONLY, 0);
    elf_file = elf_begin(file_descriptor, ELF_C_READ, NULL);
    elf_kind_file = elf_kind(elf_file);

    elf_end(elf_file);
    close(file_descriptor);


    return 0;
}

这是我从终端获得的信息(目前使用的是 Ubuntu 11.4):

gcc sample.c -o sample
/tmp/ccP7v2DT.o: In function `main':
sample.c:(.text+0x57): undefined reference to `elf_begin'
sample.c:(.text+0x67): undefined reference to `elf_kind'
sample.c:(.text+0x77): undefined reference to `elf_end'
collect2: ld returned 1 exit status

更新

解决了我在编译过程中将 -lelf 放在我的文件之前的所有问题,除了一个问题。最后一个我只能解决将我的 libelf 更新到新版本(在 Synaptic Manager 上不可用):

wget http://ftp.br.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.153-1_i386.deb
wget http://ftp.br.debian.org/debian/pool/main/e/elfutils/libelf1_0.153-1_i386.deb
sudo dpkg -i libelf-dev_0.153-1_i386.deb libelf1_0.153-1_i386.deb

最佳答案

您可能需要链接到图书馆。执行此操作的标准方法是:

gcc sample.c -l elf -o sample

这会在标准库目录中搜索 libelf.a,并将该存档中的相关目标文件包含到构建中。假设库已正确安装,libelf.a 或类似名称的文件应该存在。

关于c - 自由 : Undefined Reference for functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591145/

相关文章:

c - fatal error :libavcodec/avcodec.h No such file or directory

c - 为什么我只能传递数组的第一个索引?

c++ - C/C++ 行的人类可读优化版本

c++ - 编写 tcp 服务器——缓冲流

c++ - 链接到静态库时出现 undefined reference 错误

c - GCC:对 xxx 的 undefined reference

c - 如果我从一个函数返回而不调用 pthread_mutex_unlock 会发生什么?

c++ - 为什么模板只能在头文件中实现?

c - 如何解决 "undefined reference to function"错误?

c - 编译器 ID 上的错误返回 1 退出状态