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.h
FreeBSDのバージョンは/usr/local/include/libelf/libelf.h
ユーザー/システム管理者によってインストールされ、ほとんどの他のパッケージの依存関係の一部である可能性が高いです。基本に含まれるバージョンが正しいバージョンではないか、インストールされているバージョンが次のバージョンである可能性があります。まったく異なるソース。
これらのどれでも使用できますが、これがないシステムに移動する場合は/usr/local/include/libelf/libelf.h
ポートまたはpkg
。