Soy nuevo en la programación de Linux y estoy tratando de usar la biblioteca BFD. Este es el código actual estoy tratando de compilar:Errores de compilación utilizando bfd.h en Linux
#include <bfd.h>
#include <stdlib.h>
bfd *abfd;
int main() {
bfd_init();
abfd = bfd_openr("/home/mike/Desktop/testFunc/testProg", NULL);
return 0;
}
estoy usando la siguiente línea de comandos para compilar:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo
Y estoy consiguiendo los errores siguientes:
gcc readInfo.c /usr/lib/libbfd.a -o readInfo /usr/lib/libbfd.a(elflink.o): en la función
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: referencia indefinida a_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: referencia indefinida albasename' undefined reference to
_sch_istable' collect2: ld devolvió 1 salida estado de maquillaje: * [todos] Error 1
Hay hay muchas más líneas de errores, que puede ver here. Estoy seguro de que hay una explicación simple para esto, pero me ha dejado perplejo por un tiempo.
Para resumir lo que he hecho hasta ahora:
- Instalado generación limpia de Ubuntu
- paquete instalado binutils-dev
no me daba cuenta de que lo que estaba haciendo estaba enlazado estático. ¿Hay alguna razón por la que el enlace estático hubiera causado estos errores? –
El '/ usr/lib/libbfd.so' depende de otras bibliotecas dinámicas para algunas de sus funciones, por lo que la versión estática' .a' también requerirá esas otras bibliotecas estáticas al vincular el ejecutable final. Sin embargo, estoy teniendo problemas para averiguar cómo construirlo estáticamente. – sarnold
De acuerdo. Voy a aceptar esta respuesta, ya que soluciona el problema inmediato, pero si te lo agradecería mucho, finalmente encontraras cómo compilarlo estáticamente correctamente :) –