1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

autotools library dependencies

  • davewood
  • 4. August 2009 um 14:19
  • Unerledigt
  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 4. August 2009 um 14:19
    • #1

    Ich versuch gerade ein Projekt das wir bisher mit eigenem Makefile kompiliert haben zur Arbeit mit den autotools zu überreden.

    Das Programm soll einmal als library ausgeliefert werden und einmal als executable (einfach noch ein main.o dazulinken im Prinzip)
    Die Library lässt sich problemlos kompilieren aber das binary noch nicht. Da erhalte ich eine undefined reference Fehlermeldung vom Linker.

    Dachte gleich mal an eine falsche Linkreihenfolge. Beim Vergleich meiner library Reihenfolge im Makefile.am mit dem Befehl den make dann ausführt fiel mir auf dass die Reihenfolge komplett anders ist.

    Falls mir hier jemand einen Tipp geben kann wär das super.

    Makefile.am

    Code
    lib_LTLIBRARIES = libakmotion.la
    libakmotion_la_SOURCES = \
        interface.cpp   \
        akactioncall.cpp   \
        akactioncall.hpp   \
        ...
    
    
    bin_PROGRAMS = akmotion
    akmotion_SOURCES = main.cpp
    akmotion_LDADD = \
        -L${AL_DIR}/extern/c/linux/lib/ \
        -L${AL_DIR}/extern/c/aldebaran/alcommon/lib/linux \
        -L${AK_LIB} \
        -lpython2.5 \
        -ldl \
        -lutil \
        ${AL_DIR}/extern/c/linux/lib/libboost_thread-gcc41-mt.a \
        ${AL_DIR}/extern/c/linux/lib/libboost_signals-mt.a \
        ${AL_DIR}/extern/c/linux/lib/libboost_filesystem-mt.a \
        ${AL_DIR}/extern/c/aldebaran/alcommon/lib/linux/libalcommon.a \
        ${AL_DIR}/extern/c/linux/lib/libtinyxml.a \
        ${AL_DIR}/extern/c/linux/lib/libhighgui.so \
        ${AL_DIR}/extern/c/linux/lib/libcxcore.so \
        ${AL_DIR}/extern/c/linux/lib/libcvaux.so \
    Alles anzeigen

    make

    Code
    g++ 
    -g -O2 
    -o .libs/akmotion 
    main.o 
    /home/nao/opt/naoqi/extern/c/linux/lib/libhighgui.so 
    /home/nao/opt/naoqi/extern/c/linux/lib/libcxcore.so 
    /home/nao/opt/naoqi/extern/c/linux/lib/libcvaux.so 
    /home/nao/opt/naoqi/extern/c/linux/lib/libcv.so  
    -L/home/nao/opt/naoqi/extern/c/linux/lib/ 
    -L/home/nao/opt/naoqi/extern/c/aldebaran/alcommon/lib/linux 
    -L/home/nao/projects/robocup/nao/trunk/lib 
    -lpython2.5 /home/nao/opt/naoqi/extern/c/linux/lib/libboost_thread-gcc41-mt.a 
    /home/nao/opt/naoqi/extern/c/linux/lib/libboost_signals-mt.a 
    /home/nao/opt/naoqi/extern/c/linux/lib/libboost_filesystem-mt.a 
    /home/nao/opt/naoqi/extern/c/aldebaran/alcommon/lib/linux/libalcommon.a 
    /home/nao/opt/naoqi/extern/c/linux/lib/libtinyxml.a 
    ./.libs/libakmotion.so 
    /home/nao/projects/robocup/nao/trunk/lib/libaktools.a 
    -lutil 
    -lpthread 
    -lgcc 
    -ldl 
    -lc
    Alles anzeigen

    Fehlermeldung:

    Code
    /home/nao/opt/naoqi/extern/c/aldebaran/alcommon/lib/linux/libalcommon.a(almodule.o): In function `AL::ALModule::~ALModule()': 
    almodule.cpp:(.text+0x3824): undefined reference to `boost::signals::trackable::~trackable()'
    almodule.cpp:(.text+0x382c): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
    almodule.cpp:(.text+0x383a): undefined reference to `boost::signals::trackable::~trackable()'
    almodule.cpp:(.text+0x3842): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
    almodule.cpp:(.text+0x397f): undefined reference to `boost::signals::trackable::~trackable()'
    almodule.cpp:(.text+0x3987): undefined reference to `boost::signals::detail::signal_base::~signal_base()'
    almodule.cpp:(.text+0x3995): undefined reference to `boost::signals::trackable::~trackable()'
    ...

    I like Toast!

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 4. August 2009 um 14:51
    • #2

    Du musst die Reihenfolge der Libraries ändern. Frühere können spätere nicht sehen, umgekehrt aber schon.

    EDIT: Achso, hab mich verschaut. Eigentlich sollte es eh so passen. Aber mit der Reihenfolge herumspielen ist trotzdem oft nützlich :winking_face:

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 4. August 2009 um 17:37
    • #3
    Zitat von davewood

    Falls mir hier jemand einen Tipp geben kann wär das super.


    Das ist jetzt sehr geraten, aber gibts gute Gründe, statisch gegen die Boost zu linken?

    *plantsch*

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 10. August 2009 um 10:14
    • #4

    Da hab ich mich nicht gut ausgedrückt fürchte ich. Was ich damit ...

    Zitat

    Beim Vergleich meiner library Reihenfolge im Makefile.am mit dem Befehl den make dann ausführt fiel mir auf dass die Reihenfolge komplett anders ist.

    ... sagen wollte ist, dass die autotools die Reihenfolge in der ich die libs angebe verändert. Somit kann ich nicht rumspielen damit weil ich das System dahinter ned versteh.

    Zitat

    gibts gute Gründe, statisch gegen die Boost zu linken?

    Auf Nachfrage erfuhr ich, dass dies von einem Beispielprogramm des Herstellers übernommen wurde. Bei dem Projekt handelt es sich uebrigens um eins der Robocup Teams der TU Wien.
    Abgesehen davon kompiliert das Programm ja mit dem handgeschriebenen Makefile.

    I like Toast!

    2 Mal editiert, zuletzt von davewood (10. August 2009 um 14:26)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung