2012-08-27 8 views
6

Ho un progetto che coinvolgeCome eseguire il debug di un programma racchiuso in uno script libtool?

  • librerie condivise cioè: mylib.so
  • programma (test) utilizzando queste librerie condivise, vale a dire: test_mylib

Quando provo a fare funzionare gdb su test_mylib, stampa:

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

Quando uso il programma reale (.libs/test_mylib) direttamente, invece, si lamenta ancora:

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

Come posso eseguire gdb per eseguire il debug il mio programma?

risposta

9

Questo problema si è verificato in coppie di giorni fa e non c'è ancora una risposta generica su SO. Solo casi speciali. Ecco la risposta che ho trovato in questa pagina: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

Fino a quando il programma non viene installato, il sistema non sa dove cercare gli oggetti condivisi. Di solito si trovano nella sottodirectory .libs della loro cartella sorgente.

Libtool genera uno script convenienza per consentire il debug prima dell'installazione vera e propria è fatto (chi vuole installare il software bacato prima, debug dopo?)

Fortunatamente, lo script generato fornisce un aiuto per questo :

libtool --mode=execute gdb test_mylib 
+0

Su un sistema OS X, visualizzo 'error: libtool: carattere di opzione sconosciuto \' - 'in: --mode = execute' (la mia soluzione era di installare su un prefisso, ma forse --disable-shared come menzionato di seguito è più semplice a lungo termine) – unhammer

3

La soluzione raccomandata dai documenti libtool è quello di utilizzare statica che collega durante lo sviluppo, come ho di misura descritto in: Build libtool application with static linking to local components

Per fare ciò, utilizzare l'opzione --disable-shared per lo script ./configure.

Ad esempio:

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

Ora l'eseguibile generato è un binario eseguibile direttamente, piuttosto che uno script libtool.

Questo ha l'ulteriore vantaggio di dimezzare il tempo di costruzione.

+0

Altre informazioni di base senza la soluzione '--disabled-shared': https://autotools.io/libtool/wrappers.html e https://www.gnu.org/software/libtool /manual/html_node/Debugging-executables.html – nobar

Problemi correlati