2012-08-27 14 views
6

Mam projekt z udziałemJak debugować program zawinięty w skrypcie libtool?

  • współdzielone biblioteki IE: mylib.so
  • programu (test) stosując te współdzielone biblioteki IE: test_mylib

Kiedy próbuję uruchomić gdb na test_mylib, drukuje:

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

Kiedy używam programu rzeczywistego (.libs/test_mylib) bezpośrednio zamiast tego wciąż narzeka:

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

Jak mogę uruchomić gdb do debugowania mój program?

Odpowiedz

9

To jest problem, który wpadł mi na kilka dni temu i nie ma jeszcze ogólnej odpowiedzi na SO. Tylko specjalne przypadki. Oto odpowiedź, którą znalazłem na tej stronie: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

Do czasu zainstalowania programu system nie wie, gdzie szukać wspólnych obiektów. Zwykle znajdują się one w podkatalogu .libs ich folderu źródłowego.

Libtool generuje skrypt ogólnospożywczy, aby umożliwić debugowanie przed rzeczywista instalacja jest wykonywana (kto chce zainstalować oprogramowanie buggy przed, debug to po?)

szczęście wygenerowany skrypt zapewnia pomocnika dla tego :

libtool --mode=execute gdb test_mylib 
+0

Na komputerze z systemem OS X pojawia się komunikat 'error: libtool: unknown option character \ '-' in: --mode = execute' (moim obejściem było zainstalowanie na prefiksie, ale może - dezable-shared jak wspomniano poniżej jest prostsze na dłuższą metę). – unhammer

3

rozwiązanie zalecane przez Dokumenty libtool jest użycie statyczne powiązanie w czasie rozwoju, jak to opisano w: Build libtool application with static linking to local components

Aby to zrobić, należy użyć opcji --disable-shared do skryptu ./configure.

Na przykład:

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

Teraz wygenerowany plik wykonywalny jest bezpośrednio wykonywalny binarny zamiast skrypt libtool.

To daje dodatkową korzyść w postaci zmniejszenia o połowę czasu budowy.

+0

Pozostałe informacje dodatkowe bez rozwiązania '--disabled-shared': https://autotools.io/libtool/wrappers.html i https://www.gnu.org/software/libtool /manual/html_node/Debugging-executables.html – nobar

Powiązane problemy