alb*_*amp 3 c undefined-reference
我正在尝试使用 Libelf 库来获取一些 elf 文件的信息。但我不断收到这些“未定义的引用[...]”。我从突触安装了 libelf(也尝试从网站获取),并且该库似乎安装正常。
我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是我从终端得到的信息(当前使用 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
Run Code Online (Sandbox Code Playgroud)
更新
解决了我在编译过程中将 -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
Run Code Online (Sandbox Code Playgroud)
小智 6
您可能需要链接到该库。执行此操作的标准方法是:
gcc sample.c -l elf -o sample
Run Code Online (Sandbox Code Playgroud)
这会在标准库目录中搜索 libelf.a,并将该存档中的相关目标文件包含到构建中。假设该库已正确安装,libelf.a 或类似名称的文件应该存在。