Jestem nowy w programowaniu Linuksa i próbuję użyć biblioteki BFD. Jest to aktualny kod Próbuję skompilować:Błędy kompilacji przy użyciu bfd.h w systemie Linux
#include <bfd.h>
#include <stdlib.h>
bfd *abfd;
int main() {
bfd_init();
abfd = bfd_openr("/home/mike/Desktop/testFunc/testProg", NULL);
return 0;
}
Używam następujący wiersz polecenia do kompilacji:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo
I otrzymuję następujące błędy:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo /usr/lib/libbfd.a(elflink.o): W funkcji
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: niezdefiniowane odniesienie do_sch_istable' /usr/lib/libbfd.a(elflink.o): In function
bfd_elf_size_dynamic_sections ': /build/buildd/binutils-2.21.53.20110810/builddir- single/BFD /../../ BFD/elflink.c: 6048: niezdefiniowana odniesienia dolbasename' undefined reference to
_sch_istable”collect2: ld zwróconym 1 Zakończ markę Status: * [ALL] błąd 1
Nie to o wiele więcej linii błędów, które można zobaczyć here. Jestem pewien, że jest to proste wyjaśnienie, ale przez pewien czas mnie to zaskoczyło.
Podsumowując to, co zrobiłem do tej pory:
- Zainstalowane czystą kompilację Ubuntu
- Zainstalowany pakiet binutils-dev
nie zdawałem sobie sprawy, że to co robię było statycznie łączenie. Czy istnieje powód, dla którego statyczne połączenie spowodowałoby te błędy? –
'/ usr/lib/libbfd.so' zależy od innych bibliotek dynamicznych dla niektórych jego funkcji - więc statyczna wersja' .a' będzie wymagać również innych bibliotek statycznych podczas łączenia końcowego pliku wykonywalnego. Mam jednak problem ze statycznym budowaniem go. – sarnold
W porządku. Przyjmę tę odpowiedź, ponieważ rozwiązuje ona natychmiastowy problem, ale jeśli byłbym bardzo wdzięczny, gdyby w końcu udało się jej poprawnie skompilować statycznie :) –