Seite 1 von 1
QExtSerial - Problem (Anfängerfrage, mal wieder)
Verfasst: 18. Mai 2010 23:13
von LukiehLuck
Hi,
ich verwende in meinen Projekt QExtserial, um einen Mikrocontroller über die serielle Schnittstelle anzusprechen.
Hatte eine ältere alpha version der Bibliothek, mit der das nur senden nicht richtig funktioniert hat und habe versucht eine andere version auf gleiche weise einzubinden.
Nun bekomme ich zu jedem aufruf von comport->setzeeinstellung() eine undefined reference-Meldung. Woran kann das liegen habe die .pro datei schon bearbeitet und glaube das das einbinden der dateien so hinhaun sollte. Was gibt es sonst für Ursachen?
mfG
Lukas
Verfasst: 19. Mai 2010 09:00
von Cabo
poste uns doch mal deinen Quellcode und die genaue Fehlermeldung.
ich hatte vor ein paar Wochen auch Probleme mit QExtSerial, vllt kann ich dir helfen

Verfasst: 21. Mai 2010 17:13
von LukiehLuck
sry, war die letzten tage viel beschäftigt deshalb erst jetzt:
serial.cpp (nur Ausschnitte)
Code: Alles auswählen
#include "serial.h"
#include "qtextser\qextserialport.h"
serial::serial()
{
/*Da kommen Felermeldungen:*/
com = new QextSerialPort;
com->setPortName("COM1");
com->setFlowControl(FLOW_OFF);
com->setBaudRate(BAUD38400);
com->setParity(PAR_NONE);
com->setDataBits(DATA_8);
com->setStopBits(STOP_1);
com->setFlowControl(FLOW_OFF);
com->setQueryMode(QextSerialPort::Polling);
QObject::connect(this,SIGNAL(dataRecieved(QString)),this,SLOT(dataIn(QString)));
}
void serial::poll()
{
char readchar;
int readint;
/*hier keine Fehler!*/
if (com->isReadable())
{
readint=com->bytesAvailable();
if(readint>0)
{
com->getChar(&readchar);
emit charRecieved(readchar);
}
}
}
Code: Alles auswählen
#ifndef SERIAL_H
#define SERIAL_H
#define Q_OS_WIN
#include "qtextser\qextserialport.h"
#include <Qt/qstring.h>
#include <QObject>
#include <QThread>
#include <QTimer>
#include <QChar>
#include "QApplication"
#include "QMessageBox"
class serial:public QThread
{
Q_OBJECT
public:
serial();
~serial();
void start_polling();
void stop_polling();
double recieveData();
private:
QextSerialPort *com;
QTimer *timer;
signals:
void charRecieved(char);
void dataRecieved(QString);
void newValue(double);
void dataSent(QString);
private slots:
void charIn(char);
void dataIn(QString);
void poll();
public slots:
void sendString(QString);
};
#endif // SERIAL_H
Projektdatei:
Code: Alles auswählen
# -------------------------------------------------
# Project created by QtCreator 2010-03-22T10:52:17
# -------------------------------------------------
TARGET = jetztaberwirklich
TEMPLATE = app
SOURCES += main.cpp \
tnttool.cpp \
serial.cpp
HEADERS += tnttool.h \
serial.h \
uart_commands.h
FORMS += tnttool.ui
Copilermeldungen:
C:\Users\Lukas\Documents\QT\jetztaberwirklich/serial.cpp:8: undefined reference to `_imp___ZN14QextSerialPortC1ENS_9QueryModeE'
...mehr von der sorte....
C:\Users\Lukas\Documents\QT\jetztaberwirklich/serial.cpp:15: undefined reference to `_imp___ZN14QextSerialPort14setFlowControlE8FlowType'
letztenendes:

error: collect2: ld returned 1 exit status
hoffe ihr könnt was damit anfangen.
eventuell hat das ganze auch nichts mit qextserial zutun kp...
Verfasst: 21. Mai 2010 17:35
von RavenIV
Meine Fragen:
- Wo öffnest Du den Com-Port?
- Hast Du die Lib für qextserialport eingebunden?
- Ist die Lib im richtigen Format (für MinGW oder MS VisualStudio)?
Verfasst: 21. Mai 2010 21:56
von LukiehLuck
das sind alles sehr gute fragen...
1. was meinst du mit öffnen? in dem code oben sieht man die initalisierung und das auslesen mache ich dann mittels polling, ist aber hier nicht von bedeutung, weil mein problem im moment die Compilermeldungen zum initalisieren der schnittstelle sind.
2. ja, wie man im geposteten code sieht: #include "qtextser\qextserialport.h"
3. Das könnte es sein, aber woran sieht man welche version es ist? Habe mir von der Google-code seite der lib einfach einzelne files gezogen, hab also keine ahnung für welche platform die sind.
Gruß
Verfasst: 25. Mai 2010 13:01
von christophr
LukiehLuck hat geschrieben:1. was meinst du mit öffnen? in dem code oben sieht man die initalisierung und das auslesen mache ich dann mittels polling, ist aber hier nicht von bedeutung, weil mein problem im moment die Compilermeldungen zum initalisieren der schnittstelle sind.
In Deinem Code wird die Schnittstelle nirgendwo geöffnet. Was bei dir fehlt, ist ein
(QtDoku) und sinnvollerweise auch direkt ein
spätestens im Destruktor.
LukiehLuck hat geschrieben:2. ja, wie man im geposteten code sieht: #include "qtextser\qextserialport.h"
Das ist nur der Header, damit der Compiler die Deklarationen kennt. Die eigentliche Bibliothek hast Du aber nicht eingebunden.
Code: Alles auswählen
# Projekt.pro
unix:LIBS += -lqextserialport
win32:LIBS += qextserialport.lib
(QtDoku)
Je nachdem, wie deine Lib heißt, musst Du den Namen oder den Pfad noch anpassen.
LukiehLuck hat geschrieben:3. Das könnte es sein, aber woran sieht man welche version es ist? Habe mir von der Google-code seite der lib einfach einzelne files gezogen, hab also keine ahnung für welche platform die sind.
Das Format müsste im Normalfall neben dem Download-Link gestanden haben. Oder hast Du dir das Quellcodepaket runtergeladen? Dann musst Du QExtSerialport erst noch kompilieren.
Verfasst: 29. Mai 2010 12:13
von LukiehLuck
ok, scheinbar habe ich keine ahnung, von dem was ich da mache...
ja, ich habe nur die Quelldateinen gezogen. Wenn ich die .pro datei von qextserial im creator öffne und versuche zu kompilieren geht das jedes mal schief. kommt keine fehlermeldung, der Fortschrittsbalken beibt einfach stehn und wird rot. Was mache ich falsch? hat jemand einen link, wo man die kompilierte lib downloaden kann? hab sowas nur für die älteren verionen gefunden.
Verfasst: 31. Mai 2010 21:48
von christophr
Um Cabro zu zitieren:
Cabo hat geschrieben:poste uns doch mal deinen Quellcode und die genaue Fehlermeldung.
Solange du den Quellcode von QExtSerialport nicht verändert hast, sollte der unwichtig sein. Die Fehlermeldung des Compilers oder Linkers wird hingegen schon benötigt.
Hellsehen kann hier schließlich keiner.
Verfasst: 6. Juni 2010 18:53
von LukiehLuck
ich habe es jetzt geschafft, qextserial zu erstellen. Habe auch schon versucht sie in mein Projekt einzubinden. Ging aber nicht. Kann mir kurz einer erklären wo welche datei sein muss und wie ich die dann einbinde?