FreeBSDに2つの異なるlibelf.hとlibdwarf.hがありますか?

FreeBSDに2つの異なるlibelf.hとlibdwarf.hがありますか?

FreeBSD 10.3には2つのlibelf.h/usr/include/libelf.h/usr/local/include/libelf/libelf.h.があり、定義が異なりますenum Elf_Cmd

/usr/include/libdwarf.hまた、2つのlibdwarf.hとがあります/usr/local/include/libdwarf.h。そして彼らは異なる定義を持っていますdwarf_init()

なぜ?違いは何ですか?どちらを使うべきですか?

===更新===

forquaのおかげで、2つの名前のライブラリがあることがわかりました。両方が機能しましたlibelf。しかし、まだ問題がありますlibdwarf

パスワード:

#include <stdio.h>
#include <fcntl.h>
#include <libdwarf.h>

int main()
{
    int fd = open("memleax", O_RDONLY);

    Dwarf_Debug dbg;
    Dwarf_Error error;
#if USR_LOCAL
    int res = dwarf_init(fd, DW_DLC_READ, 0, 0, &dbg, &error);
    if(res != DW_DLV_OK) {
            printf("dwarf_init error: %s\n", dwarf_errmsg(error));
            return -1;
    }
#else
    int res = dwarf_init(fd, DW_DLC_READ, &dbg, &error);
    if(res != DW_DLV_OK) {
            printf("dwarf_init error: %s\n", dwarf_errmsg(&error));
            return -1;
    }
#endif

システムライブラリを使用する場合:

cc  debugline.c -o debugline   -lelf -ldwarf

問題が発生しました。

dwarf_init error: ELF error : I/O error [dwarf_init(738)]

usr-local-libを使用する場合:

cc -D USR_LOCAL -I /usr/local/include/ debugline.c -o debugline -L /usr/local/lib/ -lelf -ldwarf

問題が発生しました。

dwarf_init error: DW_DLE_ELF_BEGIN_ERROR 27 a call to elf_begin(... ELF_C_READ_MMAP... ) failed

どうやって使うべきですかlibdwarf

===更新

わかりました、わかりました…。

2つありますlibdwarf。 system-libを無視し、pkgを介してnon-system-libをインストールして使用する必要があります。

2つありますlibelf。 system-libを使用する必要がありますが、pkgを介してnon-system-libをインストールすることはできません。

答え1

/usr/include/libelf.hFreeBSDのバージョンは/usr/local/include/libelf/libelf.hユーザー/システム管理者によってインストールされ、ほとんどの他のパッケージの依存関係の一部である可能性が高いです。基本に含まれるバージョンが正しいバージョンではないか、インストールされているバージョンが次のバージョンである可能性があります。まったく異なるソース。

これらのどれでも使用できますが、これがないシステムに移動する場合は/usr/local/include/libelf/libelf.hポートまたはpkg

関連情報