No FreeBSD 10.3 existem 2 libelf.h, /usr/include/libelf.h
e /usr/local/include/libelf/libelf.h
. E eles têm diferentes definições, como enum Elf_Cmd
.
Além disso, há 2 libdwarf.h, /usr/include/libdwarf.h
e /usr/local/include/libdwarf.h
. E eles têm diferentes definições, como dwarf_init()
.
Por quê?
Qual é a diferença?
Qual deles devo usar?
=== update ===
Obrigado pelo forquare, agora eu sei que existem duas bibliotecas chamadas libelf
. Eu os experimentei e eles trabalharam nos dois.
No entanto, ainda tenho problom com libdwarf
.
Código:
#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
Se estiver usando system-lib:
cc debugline.c -o debugline -lelf -ldwarf
acontece de errado com:
dwarf_init error: ELF error : I/O error [dwarf_init(738)]
Se estiver usando usr-local-lib:
cc -D USR_LOCAL -I /usr/local/include/ debugline.c -o debugline -L /usr/local/lib/ -lelf -ldwarf
acontece de errado com:
dwarf_init error: DW_DLE_ELF_BEGIN_ERROR 27 a call to elf_begin(... ELF_C_READ_MMAP... ) failed
Como devo usar libdwarf
?
=== atualizar
Ok, eu sei ....
Existem 2 libdwarf
. Eu deveria ignorar o system-lib, e instalar o não-system-lib pelo pkg, e usá-lo.
Existem 2 libelf
. Eu deveria usar o system-lib, e não posso instalar o não-system-lib pelo pkg.