2012-08-27 4 views
6

J'ai un projet impliquantComment déboguer un programme enveloppé dans un script libtool?

  • bibliothèques partagées à savoir: mylib.so
  • programme (test) en utilisant ces bibliothèques partagées à savoir: test_mylib

Lorsque je tente de lancer gdb sur test_mylib, il imprime:

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

Lorsque j'utilise le vrai programme (.libs/test_mylib) directement à la place, il se plaint encore:

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

Comment puis-je exécuter gdb pour déboguer mon programme?

Répondre

9

C'est un problème que j'ai rencontré il y a quelques jours et il n'y a pas encore de réponse générique sur SO. Seulement des cas spéciaux. Voici la réponse que j'ai trouvée sur cette page: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

Jusqu'à ce que le programme soit installé, le système ne sait pas où chercher les objets partagés. Ils se trouvent généralement dans le sous-répertoire .libs de leur dossier source.

Libtool génère un script pratique pour permettre le débogage avant l'installation proprement dite se fait (qui veut installer le logiciel buggy avant, déboguer après?)

Heureusement, le script généré fournit une aide pour cette :

libtool --mode=execute gdb test_mylib 
+0

Sur une machine OS X, j'obtiens 'error: libtool: inconnue option character \' - 'dans: --mode = execute' (ma solution de contournement était d'installer un préfixe, mais peut-être --disable-shared comme mentionné ci-dessous est plus simple à long terme) – unhammer

3

La solution recommandée par les libtool docs est d'utiliser statique reliant au cours du développement, comme je decribed à: Build libtool application with static linking to local componentsPour ce faire, utilisez l'option --disable-shared au script ./configure.

Par exemple:

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

Maintenant l'exécutable généré est un plutôt qu'un script libtool binaire directement exécutable.

Cela a l'avantage supplémentaire de réduire de moitié le temps de construction.

+0

Autres informations de base sans la solution '--disabled-shared': https://autotools.io/libtool/wrappers.html et https://www.gnu.org/software/libtool /manual/html_node/Debugging-executables.html – nobar

Questions connexes