2012-08-27 19 views
6

Tengo un proyecto que involucra¿Cómo depurar un programa envuelto en un script libtool?

  • bibliotecas compartidas, es decir: mylib.so
  • programa (de prueba) el uso de estas bibliotecas compartidas, es decir: test_mylib

Cuando trato de ejecutar gdb en test_mylib, imprime:

"test_mylib": not in executable format: File format not recognized 

Cuando uso el programa real (.libs/test_mylib) directamente en lugar, todavía se queja:

.libs/test_mylib: can't load library 'libhello.so.0' 

¿Cómo puedo ejecutar gdb para depurar mi programa?

Respuesta

9

Este es un problema que encontré hace un par de días y todavía no hay una respuesta genérica sobre SO. Solo casos especiales. Aquí está la respuesta que encontré en esta página: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

Hasta que se instala el programa, el sistema no sabe dónde buscar los objetos compartidos. Por lo general, se encuentra en el subdirectorio .libs de su carpeta de origen.

Libtool genera un script de conveniencia para permitir una depuración antes de realizar la instalación real (que quiere instalar el software defectuoso antes, depurarlo después?)

Afortunadamente, el script generado proporciona una ayuda para este :

libtool --mode=execute gdb test_mylib 
+0

En una máquina OS X, obtengo 'error: libtool: unknown option character \' - 'en: --mode = execute' (mi solución fue instalar a un prefijo, pero quizás --disable-shared como se menciona a continuación es más simple a la larga) – unhammer

3

La solución recomendada por los documentos libtool es utilizar estática que une durante el desarrollo, como lo describen en: Build libtool application with static linking to local components

Para hacer esto, utilice la opción --disable-shared para el script ./configure.

Por ejemplo:

./configure --enable-debug --disable-shared 

Ahora el ejecutable generado es un binario ejecutable directamente en lugar de un guión libtool.

Esto tiene la ventaja adicional de reducir aproximadamente a la mitad el tiempo de construcción.

+0

Otra información de fondo sin la solución '--disabled-shared': https://autotools.io/libtool/wrappers.html y https://www.gnu.org/software/libtool /manual/html_node/Debugging-executables.html – nobar

Cuestiones relacionadas