undefined reference
-
ü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
-
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
-
@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? -
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. -
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? -
@MHage said in undefined reference:
Wie kann ich denn jetzt herausfinden, warum er abstürzt?
Debugger
-
@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.
-
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...