Problem mit QextSerialPort

Alles rund um die Programmierung mit Qt
Antworten
xchrisx
Beiträge: 18
Registriert: 23. August 2007 20:20
Wohnort: Duisburg
Kontaktdaten:

Problem mit QextSerialPort

Beitrag von xchrisx »

Hallo alle zusammen.
Ich habe ein Problem mit QextSerialPort.

Ich habe die Headerdatei <QextSerialPort> in mein Programm einbauen können. Auch kann ich in der Headerdatei meiner Klasse einen Pointer (QextSerialport* port;) deklarieren.
jedoch, wenn ich in der .cpp Datei versuche den Port zu instanzieren(?) bekomme ich vom Debugger eine große Fehlermeldung:

Code: Alles auswählen

ywidget.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QextSerialPort::QextSerialPort(class QString const &)" (__imp_??0QextSerialPort@@QAE@ABVQString@@@Z) referenced in function "public: __thiscall MyWidget::MyWidget(class QWidget *)" (??0MyWidget@@QAE@PAVQWidget@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall QextSerialBase::isSequential(void)const " (?isSequential@QextSerialBase@@UBE_NXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall Win_QextSerialPort::open(class QFlags<enum QIODevice::OpenModeFlag>)" (?open@Win_QextSerialPort@@UAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::close(void)" (?close@Win_QextSerialPort@@UAEXXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual __int64 __thiscall Win_QextSerialPort::size(void)const " (?size@Win_QextSerialPort@@UBE_JXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall QextSerialBase::atEnd(void)const " (?atEnd@QextSerialBase@@UBE_NXZ)
mywidget.obj : error LNK2001: unresolved external symbol "protected: virtual __int64 __thiscall Win_QextSerialPort::readData(char *,__int64)" (?readData@Win_QextSerialPort@@MAE_JPAD_J@Z)
mywidget.obj : error LNK2001: unresolved external symbol "protected: virtual __int64 __thiscall Win_QextSerialPort::writeData(char const *,__int64)" (?writeData@Win_QextSerialPort@@MAE_JPBD_J@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QextSerialBase::construct(void)" (?construct@QextSerialBase@@UAEXXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QextSerialBase::setPortName(class QString const &)" (?setPortName@QextSerialBase@@UAEXABVQString@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual class QString __thiscall QextSerialBase::portName(void)const " (?portName@QextSerialBase@@UBE?AVQString@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setBaudRate(enum BaudRateType)" (?setBaudRate@Win_QextSerialPort@@UAEXW4BaudRateType@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual enum BaudRateType __thiscall QextSerialBase::baudRate(void)const " (?baudRate@QextSerialBase@@UBE?AW4BaudRateType@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setDataBits(enum DataBitsType)" (?setDataBits@Win_QextSerialPort@@UAEXW4DataBitsType@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual enum DataBitsType __thiscall QextSerialBase::dataBits(void)const " (?dataBits@QextSerialBase@@UBE?AW4DataBitsType@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setParity(enum ParityType)" (?setParity@Win_QextSerialPort@@UAEXW4ParityType@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual enum ParityType __thiscall QextSerialBase::parity(void)const " (?parity@QextSerialBase@@UBE?AW4ParityType@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setStopBits(enum StopBitsType)" (?setStopBits@Win_QextSerialPort@@UAEXW4StopBitsType@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual enum StopBitsType __thiscall QextSerialBase::stopBits(void)const " (?stopBits@QextSerialBase@@UBE?AW4StopBitsType@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setFlowControl(enum FlowType)" (?setFlowControl@Win_QextSerialPort@@UAEXW4FlowType@@@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual enum FlowType __thiscall QextSerialBase::flowControl(void)const " (?flowControl@QextSerialBase@@UBE?AW4FlowType@@XZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setTimeout(unsigned long,unsigned long)" (?setTimeout@Win_QextSerialPort@@UAEXKK@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::flush(void)" (?flush@Win_QextSerialPort@@UAEXXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual __int64 __thiscall Win_QextSerialPort::bytesAvailable(void)" (?bytesAvailable@Win_QextSerialPort@@UAE_JXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::ungetChar(char)" (?ungetChar@Win_QextSerialPort@@UAEXD@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual __int64 __thiscall QextSerialBase::readLine(char *,__int64)" (?readLine@QextSerialBase@@UAE_JPAD_J@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall QextSerialBase::lastError(void)const " (?lastError@QextSerialBase@@UBEKXZ)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::translateError(unsigned long)" (?translateError@Win_QextSerialPort@@UAEXK@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setDtr(bool)" (?setDtr@Win_QextSerialPort@@UAEX_N@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Win_QextSerialPort::setRts(bool)" (?setRts@Win_QextSerialPort@@UAEX_N@Z)
mywidget.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __thiscall Win_QextSerialPort::lineStatus(void)" (?lineStatus@Win_QextSerialPort@@UAEKXZ)
mywidget.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QextSerialPort::~QextSerialPort(void)" (__imp_??1QextSerialPort@@UAE@XZ) referenced in function "public: virtual void * __thiscall QextSerialPort::`scalar deleting destructor'(unsigned int)" (??_GQextSerialPort@@UAEPAXI@Z)
Wo ist jetzt mein Fehler.
Muss leider dabei sagen, dass ich sowohl bei C++ als auch bei Qt ein Anfänger bin.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Sieht aus als hättest du eine notwendige Bibliothek nicht eingebunden (vermutlich die von Qxt).
xchrisx
Beiträge: 18
Registriert: 23. August 2007 20:20
Wohnort: Duisburg
Kontaktdaten:

Beitrag von xchrisx »

jemand hat auf der arbeit ein VS2005 Project draus geamcht (QtSolutions).
und dann zur Installation eine *.bat datei.

der Inhalt ist folgender:

Code: Alles auswählen

copy .\debug\QtSolutionsd.dll %QTDIR%\bin
copy .\debug\QtSolutionsd.dll.manifest %QTDIR%\bin
copy .\debug\QtSolutionsd.lib %QTDIR%\lib
copy .\debug\QtSolutionsd.pdb %QTDIR%\lib
copy .\debug\QtSolutionsd.ilk %QTDIR%\lib
copy .\debug\QtSolutionsd.exp %QTDIR%\lib

copy .\release\QtSolutions.dll %QTDIR%\bin
copy .\release\QtSolutions.dll.manifest %QTDIR%\bin
copy .\release\QtSolutions.lib %QTDIR%\lib
copy .\release\QtSolutions.exp %QTDIR%\lib

copy .\include\* %QTDIR%\include
copy .\src\*.h %QTDIR%\src
von daher denk ich, dass alles richtig eingebunden ist(ich hoffe es jedenfalls)
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Überprüf halt die eingebundenen Bibliotheken in Visual Studio.
xchrisx
Beiträge: 18
Registriert: 23. August 2007 20:20
Wohnort: Duisburg
Kontaktdaten:

Beitrag von xchrisx »

was heisst das genau? ich hab jetzt geguckt und es sind alle kopiert.
wenn du das nicht meinst könntest du mir kurz erklären was du genau damit meinst oder ein hinweis geben wo ich das nachlesen kann.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Projektdatei öffnen und in den Linkereinstellungen schauen zu welchen Bibliotheken gelinkt wird...
xchrisx
Beiträge: 18
Registriert: 23. August 2007 20:20
Wohnort: Duisburg
Kontaktdaten:

Beitrag von xchrisx »

also ich benutze ja VS2005 und da wird ein verzeichnis angegben beim linker. dort ist der subfolder /lib vom QTDir angegeben, in dem sich die QSolutions.dll(in der ja qextserial sein sollte) befindet
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Ist das wirklich so schwer einfach zu sagen welche Bibliotheken eingebunden werden? Brauchst du vielleicht eine Schritt für Schritt Anleitung?..

Projekt öffnen -> Menüpunkt "Project" -> Menüpunkt "Properties" -> Configuration Properties -> Linker -> Input -> "Additional Dependencies"
xchrisx
Beiträge: 18
Registriert: 23. August 2007 20:20
Wohnort: Duisburg
Kontaktdaten:

Beitrag von xchrisx »

für mich leider schon etwas schwieriger. hab das eben versucht und dann die qtsolutions.lib mit eingebunden. dann hat alles funktioniert.
vielen dank auch. ich hoffe ich hab deine nerven nicht zu stark strapaziert.
ich lerne programmieren fast komplett im alleingang. deswegen sind manche sachen noch total unbekannt für mich.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Man sollte beim lernen auch mit dem Grundwissen anfangen, und nicht direkt mit einem Framework.
Antworten