Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. undefined reference

undefined reference

Scheduled Pinned Locked Moved Unsolved German
15 Posts 5 Posters 1.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M MHage

    Hallo zusammen,

    ich schreibe gerade ein tool um einen Mikrocontroller zu parametrieren.
    Dazu habe ich mir folgendes Projekt als HDLC Protokoll ausgesucht: https://github.com/lexus2k/tinyproto

    Das Teil übersetzt und als externe Bibliothek eingebunden. Um einen Einstieg zu finden habe ich das mitgelieferte Example für das HDLC Protokoll ausprobiert.

    Im Editor sieht alles schön aus. Keine Fehler. Offensichtlich alles an Abhängigkeiten gefunden.

    Beim übersetzen gibt es aber zahlreiche Fehlermeldungen "undefined reference" .
    Ich vermute, eher vom Linker. Habe aber gerade keinen Plan wie ich das lösen kann.

    VG
    Matze

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #2

    @MHage Ja, das kommt vom Linker.
    Wie linkst du diese Bibliothek in deinem Projekt?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • M Offline
      M Offline
      MHage
      wrote on last edited by
      #3

      Du wirst lachen, ich musste mir bisher darum noch keine Gedanken machen...
      Bin aber auch erst seit kurzem mit Qt beschäftigt. Momentan wüsste ich nicht einmal wo das eingestellt wird.

      Müsste wirklich suchen. :-)

      1 Reply Last reply
      0
      • J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #4

        überlicherweise handelt es sich hier um fehlende includes und/oder *h/*cpp Dateien die zwar included werden, aber nicht teil des Projektes sind. also nicht im cmakelist oder pro file aufgeführt/verlinket


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        1 Reply Last reply
        0
        • M Offline
          M Offline
          MHage
          wrote on last edited by
          #5

          Ich habe die beiden Dateien hdlc.c und hdlc.h in der pro hinzugefügt.
          Bekomme jetzt zwar nur noch eine Meldung (vorerst)

          :-1: Fehler: No rule to make target 'tinyproto/src/proto/hdlc/high_level/hdlc.c', needed by 'hdlc.o'. Stop.

          jsulmJ 1 Reply Last reply
          0
          • M MHage

            Ich habe die beiden Dateien hdlc.c und hdlc.h in der pro hinzugefügt.
            Bekomme jetzt zwar nur noch eine Meldung (vorerst)

            :-1: Fehler: No rule to make target 'tinyproto/src/proto/hdlc/high_level/hdlc.c', needed by 'hdlc.o'. Stop.

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #6

            @MHage Bitte zeige deine pro Datei.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • M Offline
              M Offline
              MHage
              wrote on last edited by
              #7
              QT       += core gui serialport
              
              
              greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
              
              CONFIG += c++11
              
              # You can make your code fail to compile if it uses deprecated APIs.
              # In order to do so, uncomment the following line.
              #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
              
              SOURCES += \
                  console.cpp \
                  main.cpp \
                  mainwindow.cpp \
                  mydelegate.cpp \
                  settingsdialog.cpp \
                  terminalwindow.cpp
              
              
              HEADERS += \
                  console.h \
                  mainwindow.h \
                  mydelegate.h \
                  settingsdialog.h \
                  terminalwindow.h \
                  
              
              FORMS += \
                  mainwindow.ui \
                  settingsdialog.ui \
                  terminalwindow.ui
              
              # Default rules for deployment.
              qnx: target.path = /tmp/$${TARGET}/bin
              else: unix:!android: target.path = /opt/$${TARGET}/bin
              !isEmpty(target.path): INSTALLS += target
              
              win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/release/ -lqwt-qt5
              else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/debug/ -lqwt-qt5
              else:unix: LIBS += -L$$PWD/../../../../../../../usr/lib/ -lqwt-qt5
              
              INCLUDEPATH += $$PWD/../../../../../../../usr/include/qwt
              DEPENDPATH += $$PWD/../../../../../../../usr/include/qwt
              
              RESOURCES += \
                  Dateien.qrc
              
              
              win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/ -ltinyprotocol
              else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/ -ltinyprotocol
              else:unix: LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/ -ltinyprotocol
              
              INCLUDEPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
              DEPENDPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
              
              win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/libtinyprotocol.a
              else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/libtinyprotocol.a
              else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/tinyprotocol.lib
              else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/tinyprotocol.lib
              else:unix: PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/libtinyprotocol.a
              
              
              jsulmJ Christian EhrlicherC 2 Replies Last reply
              0
              • M MHage
                QT       += core gui serialport
                
                
                greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                
                CONFIG += c++11
                
                # You can make your code fail to compile if it uses deprecated APIs.
                # In order to do so, uncomment the following line.
                #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
                
                SOURCES += \
                    console.cpp \
                    main.cpp \
                    mainwindow.cpp \
                    mydelegate.cpp \
                    settingsdialog.cpp \
                    terminalwindow.cpp
                
                
                HEADERS += \
                    console.h \
                    mainwindow.h \
                    mydelegate.h \
                    settingsdialog.h \
                    terminalwindow.h \
                    
                
                FORMS += \
                    mainwindow.ui \
                    settingsdialog.ui \
                    terminalwindow.ui
                
                # Default rules for deployment.
                qnx: target.path = /tmp/$${TARGET}/bin
                else: unix:!android: target.path = /opt/$${TARGET}/bin
                !isEmpty(target.path): INSTALLS += target
                
                win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/release/ -lqwt-qt5
                else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/debug/ -lqwt-qt5
                else:unix: LIBS += -L$$PWD/../../../../../../../usr/lib/ -lqwt-qt5
                
                INCLUDEPATH += $$PWD/../../../../../../../usr/include/qwt
                DEPENDPATH += $$PWD/../../../../../../../usr/include/qwt
                
                RESOURCES += \
                    Dateien.qrc
                
                
                win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/ -ltinyprotocol
                else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/ -ltinyprotocol
                else:unix: LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/ -ltinyprotocol
                
                INCLUDEPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
                DEPENDPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
                
                win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/libtinyprotocol.a
                else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/libtinyprotocol.a
                else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/tinyprotocol.lib
                else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/tinyprotocol.lib
                else:unix: PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/libtinyprotocol.a
                
                
                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #8

                @MHage Ich sehe nichts was mit HDLC zu tun hat in deinem pro File...

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • M MHage
                  QT       += core gui serialport
                  
                  
                  greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                  
                  CONFIG += c++11
                  
                  # You can make your code fail to compile if it uses deprecated APIs.
                  # In order to do so, uncomment the following line.
                  #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
                  
                  SOURCES += \
                      console.cpp \
                      main.cpp \
                      mainwindow.cpp \
                      mydelegate.cpp \
                      settingsdialog.cpp \
                      terminalwindow.cpp
                  
                  
                  HEADERS += \
                      console.h \
                      mainwindow.h \
                      mydelegate.h \
                      settingsdialog.h \
                      terminalwindow.h \
                      
                  
                  FORMS += \
                      mainwindow.ui \
                      settingsdialog.ui \
                      terminalwindow.ui
                  
                  # Default rules for deployment.
                  qnx: target.path = /tmp/$${TARGET}/bin
                  else: unix:!android: target.path = /opt/$${TARGET}/bin
                  !isEmpty(target.path): INSTALLS += target
                  
                  win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/release/ -lqwt-qt5
                  else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/lib/debug/ -lqwt-qt5
                  else:unix: LIBS += -L$$PWD/../../../../../../../usr/lib/ -lqwt-qt5
                  
                  INCLUDEPATH += $$PWD/../../../../../../../usr/include/qwt
                  DEPENDPATH += $$PWD/../../../../../../../usr/include/qwt
                  
                  RESOURCES += \
                      Dateien.qrc
                  
                  
                  win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/ -ltinyprotocol
                  else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/ -ltinyprotocol
                  else:unix: LIBS += -L$$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/ -ltinyprotocol
                  
                  INCLUDEPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
                  DEPENDPATH += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/include
                  
                  win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/libtinyprotocol.a
                  else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/libtinyprotocol.a
                  else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/release/tinyprotocol.lib
                  else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/debug/tinyprotocol.lib
                  else:unix: PRE_TARGETDEPS += $$PWD/../../../../../../../usr/include/x86_64-linux-gnu/qt5/tinyproto/lib/libtinyprotocol.a
                  
                  
                  Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  @MHage said in undefined reference:

                  -L$$PWD/../../../../../../../usr/lib/release/

                  Was sind das alles für krude relative Pfade (abgesehen davon dass es unter Windows diese sicher nicht gibt)?
                  Hast Du die andere Library selbst gebaut? Und wie sehen die Fehlermeldungen genau aus?

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  1
                  • M Offline
                    M Offline
                    MHage
                    wrote on last edited by
                    #10

                    Diese Bibliothek ist für Linux, Windows, AVR bzw. Arduino.
                    Ob HDLC, Light oder auch FD verwendet wird ist eine Sache der Definition. Siehe TinyProto.h
                    in der Bibliothek libtinyprotocol.a bzw. im include Pfad soll eigentlich alles enthalten sein was man für die unterschiedlichen Protokolle braucht.

                    Ganz ehrlich? Ich beschäftige mich nun seit mehreren Tagen mit dem Teil. Auf dem Mikrocontroller habe ich es auch schon fertig implementiert. Der Bibliothek liegt ein "loopback" tool bei, mit dem man das testen kann.
                    Also auf dem Mikrocontroller ist es erstmal soweit, das ich eine Verbindung testen könnte.

                    Leider durchschaue ich aber die Probleme bei Qt nicht. Als ich z.b. die qwt Bibliothek eingebunden habe, sind auch die komischen Pfade entstanden. Siehe pro .

                    Da gab es beim übersetzen überhaupt keine Probleme. Wie gesagt, bislang musste ich mir um den Linker noch keine Gedanken machen.

                    Diese Pfade sind beim hinzufügen der "externen Bibliothek" angelegt worden.
                    Da ich Qt noch nicht lange genug kenne, geschweige denn die Strukturen, kann ich mich auch nur wundern.

                    Wäre nett, wenn ihr mir mal zeigt, wie man es richtig macht.
                    Hätte auch nie gedacht, das der Umstieg von einer IDE auf eine andere mir so viele Kopfschmerzen bereiten würde.

                    S 1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      MHage
                      wrote on last edited by
                      #11

                      Vielleicht bin ich einen kleinen Schritt weiter...

                      habe in der pro folgendes hinzugefügt:

                      QMAKE_CXXFLAGS += -fPIC -pthread -pg -fexceptions
                      QMAKE_CFLAGS += -g
                      QMAKE_LFLAGS += -L. -lm -shared -pthread -ltinyprotocol
                      

                      Damit scheint er zu übersetzen. Leider stürzt das Programm ab bevor sich das Form öffnet.
                      Allerdings ohne wirkliche Fehlermeldung. Wie kann ich denn jetzt herausfinden, warum er abstürzt?

                      jsulmJ J.HilkJ 2 Replies Last reply
                      0
                      • M MHage

                        Vielleicht bin ich einen kleinen Schritt weiter...

                        habe in der pro folgendes hinzugefügt:

                        QMAKE_CXXFLAGS += -fPIC -pthread -pg -fexceptions
                        QMAKE_CFLAGS += -g
                        QMAKE_LFLAGS += -L. -lm -shared -pthread -ltinyprotocol
                        

                        Damit scheint er zu übersetzen. Leider stürzt das Programm ab bevor sich das Form öffnet.
                        Allerdings ohne wirkliche Fehlermeldung. Wie kann ich denn jetzt herausfinden, warum er abstürzt?

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        @MHage said in undefined reference:

                        Wie kann ich denn jetzt herausfinden, warum er abstürzt?

                        Debugger

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • M MHage

                          Vielleicht bin ich einen kleinen Schritt weiter...

                          habe in der pro folgendes hinzugefügt:

                          QMAKE_CXXFLAGS += -fPIC -pthread -pg -fexceptions
                          QMAKE_CFLAGS += -g
                          QMAKE_LFLAGS += -L. -lm -shared -pthread -ltinyprotocol
                          

                          Damit scheint er zu übersetzen. Leider stürzt das Programm ab bevor sich das Form öffnet.
                          Allerdings ohne wirkliche Fehlermeldung. Wie kann ich denn jetzt herausfinden, warum er abstürzt?

                          J.HilkJ Offline
                          J.HilkJ Offline
                          J.Hilk
                          Moderators
                          wrote on last edited by
                          #13

                          @MHage
                          du hattest zuvor geschrieben:

                          Das Teil übersetzt und als externe Bibliothek eingebunden

                          verwendest du nun auch den gleichen Compiler für das Qt Projekt wie auch für die Bibliothek?


                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                          Q: What's that?
                          A: It's blue light.
                          Q: What does it do?
                          A: It turns blue.

                          1 Reply Last reply
                          0
                          • M MHage

                            Diese Bibliothek ist für Linux, Windows, AVR bzw. Arduino.
                            Ob HDLC, Light oder auch FD verwendet wird ist eine Sache der Definition. Siehe TinyProto.h
                            in der Bibliothek libtinyprotocol.a bzw. im include Pfad soll eigentlich alles enthalten sein was man für die unterschiedlichen Protokolle braucht.

                            Ganz ehrlich? Ich beschäftige mich nun seit mehreren Tagen mit dem Teil. Auf dem Mikrocontroller habe ich es auch schon fertig implementiert. Der Bibliothek liegt ein "loopback" tool bei, mit dem man das testen kann.
                            Also auf dem Mikrocontroller ist es erstmal soweit, das ich eine Verbindung testen könnte.

                            Leider durchschaue ich aber die Probleme bei Qt nicht. Als ich z.b. die qwt Bibliothek eingebunden habe, sind auch die komischen Pfade entstanden. Siehe pro .

                            Da gab es beim übersetzen überhaupt keine Probleme. Wie gesagt, bislang musste ich mir um den Linker noch keine Gedanken machen.

                            Diese Pfade sind beim hinzufügen der "externen Bibliothek" angelegt worden.
                            Da ich Qt noch nicht lange genug kenne, geschweige denn die Strukturen, kann ich mich auch nur wundern.

                            Wäre nett, wenn ihr mir mal zeigt, wie man es richtig macht.
                            Hätte auch nie gedacht, das der Umstieg von einer IDE auf eine andere mir so viele Kopfschmerzen bereiten würde.

                            S Offline
                            S Offline
                            SimonSchroeder
                            wrote on last edited by
                            #14

                            @MHage said in undefined reference:

                            Als ich z.b. die qwt Bibliothek eingebunden habe, sind auch die komischen Pfade entstanden.

                            Klassischerweise wird für qwt ein .pri-Datei in der .pro-Datei inkludiert. Ich würde vorschlagen deine händischen include- und lib-Pfade dadurch zu ersetzen. Das wird aber nicht dein aktuelle Problem lösen.

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              MHage
                              wrote on last edited by MHage
                              #15

                              Moin,

                              diese Pfade habe ich so nicht angelegt. Das kam beim importieren der externen Bibliothek automatisch.
                              Ich habe aber rausgefunden, warum er das so komisch anlegt und habe es dadurch korrigiert, das ich die Bibliothek anders abgelegt habe.

                              verwendest du nun auch den gleichen Compiler für das Qt Projekt wie auch für die Bibliothek?
                              

                              Das ist eine gute Frage... Habe ich noch gar nicht dran gedacht.
                              Ich habe, simple gestrickt wie ich manchmal bin, einfach Terminal auf und los gehts....
                              einfach mal drauf los übersetzt...

                              Das Programm läuft nun und stürzt auch nicht mehr ab.

                              Der Absturz kam auch gar nicht von der Protokoll Bibliothek, sondern von einer anderen Stelle im Programm.
                              Ich hatte von qwt die aktuelleste Version übersetzt und die alte Version entfernt. Daher kam die Ursache.

                              Was die Protokoll Bibliothek angeht, hat folgende Zeile in der pro zum Erfolg geführt:

                              QMAKE_LFLAGS +=  -ltinyprotocol
                              

                              Vielen Dank für eure Hilfe...

                              1 Reply Last reply
                              1

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved