3

Libelfライブラリを使用していくつかのelfファイルに関する情報を取得しようとしています。しかし、私はこれらの「[...]への未定義の参照」を取得し続けます。シナプスからlibelfをインストールしました(Webサイトからも取得しようとしました)。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を配置することで、1つを除くすべての問題を解決しました。最後の1つは、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
4

1 に答える 1

5

おそらくライブラリにリンクする必要があります。これを行う標準的な方法は次のとおりです。

gcc sample.c -l elf -o sample

これにより、libelf.a の標準ライブラリ ディレクトリが検索され、そのアーカイブ内の関連するオブジェクト ファイルがビルドに含まれます。ライブラリが正しくインストールされていると仮定すると、libelf.a または同様の名前のファイルが存在するはずです。

于 2012-05-14T21:26:33.383 に答える