Seite 1 von 1

Problem mit QextSerialPort

Verfasst: 1. Februar 2008 15:21
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.

Verfasst: 1. Februar 2008 15:53
von PeterLustig
Sieht aus als hättest du eine notwendige Bibliothek nicht eingebunden (vermutlich die von Qxt).

Verfasst: 1. Februar 2008 16:56
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)

Verfasst: 1. Februar 2008 17:11
von PeterLustig
Überprüf halt die eingebundenen Bibliotheken in Visual Studio.

Verfasst: 1. Februar 2008 17:32
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.

Verfasst: 1. Februar 2008 18:24
von PeterLustig
Projektdatei öffnen und in den Linkereinstellungen schauen zu welchen Bibliotheken gelinkt wird...

Verfasst: 1. Februar 2008 20:06
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

Verfasst: 1. Februar 2008 20:11
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"

Verfasst: 1. Februar 2008 20:23
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.

Verfasst: 1. Februar 2008 20:27
von PeterLustig
Man sollte beim lernen auch mit dem Grundwissen anfangen, und nicht direkt mit einem Framework.