Sono nuovo alla programmazione Linux e sto tentando di utilizzare la libreria BFD. Questo è il codice corrente che sto cercando di compilazione:Errori di compilazione che utilizzano bfd.h su Linux
#include <bfd.h>
#include <stdlib.h>
bfd *abfd;
int main() {
bfd_init();
abfd = bfd_openr("/home/mike/Desktop/testFunc/testProg", NULL);
return 0;
}
Sto usando la seguente riga di comando per la compilazione:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo
E sto ottenendo i seguenti errori:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo /usr/lib/libbfd.a(elflink.o): nella funzione
elf_link_add_object_symbols': /build/buildd/binutils-2.21.53.20110810/builddir-single/bfd/../../bfd/elflink.c:4605: undefined reference to
objalloc_free_block ' /build/build d/binutils-2.21.53.20110810/builddir-single/bfd /../../ bfd/elflink.c: 4892: riferimento non definito a_sch_istable' /usr/lib/libbfd.a(elflink.o): In function
bfd_elf_size_dynamic_sections ': /build/buildd/binutils-2.21.53.20110810/builddir- singola/BFD /../../ BFD/elflink.c: 6048: undefined reference tolbasename' undefined reference to
_sch_istable collect2': ld returned 1 exit stato make: * [tutto] Error 1
ci ci sono molte più righe di errori, che è possibile visualizzare here. Sono sicuro che c'è una spiegazione semplice per questo, ma mi ha costretto per un po '.
Per riassumere quello che ho fatto finora:
- installata generazione pulita di Ubuntu
- pacchetto installato binutils-dev
non mi rendo conto che quello che stavo facendo era staticamente collegamento. C'è una ragione per cui il collegamento statico avrebbe causato questi errori? –
'/ usr/lib/libbfd.so' dipende da altre librerie dinamiche per alcune delle sue funzionalità - quindi la versione statica' .a' richiederà anche quelle altre librerie statiche quando si collega il file eseguibile finale. Sto avendo problemi a capire come costruirlo staticamente però. – sarnold
OK. Accettare questa risposta poiché risolve il problema immediato, ma se ti sarei molto grato se alla fine avessi trovato anche come compilarlo staticamente correttamente :) –