Hallo!
Ich arbeite momentan an ein paar Erweiterungsmodulen für ein bestehendes Programm,
welches unter Win64 läuft.
Da deses Programm auf Qt 5.12.12 beruht verwende ich das bei meinen Modulen weiter.
Als IDE fungiert der QT-Creator 11.0.3.
Ich habe damit schon ein paar Erweiterungen realisiert, bislang ohne Probleme.
Im aktuellen Modul muss ich eine TCP-Verbindung herstellen, aber leider bekomme ich beim Ausführen
eine 'undefined reference' Meldung.
Hier der Code:
...........................................................
mainwindow.h:
#include <QScopedPointer>
#include <QtNetwork/QSslSocket>
..
class MainWindow : public QMainWindow
{
Q_OBJECT
..
private:
..
QScopedPointer<Ui::MainWindow> ui;
QScopedPointer<QSslSocket> socet_tcp_qrzlog;
public:
void readQRZLog();
.....................................................................
MainWindow::MainWindow(QSettings * settings, QWidget *parent)
: QMainWindow(parent)
, m_datadir {QStandardPaths::writableLocation (QStandardPaths::ApplicationsLocation)}
, m_settings {settings}
, ui(new Ui::MainWindow)
, socet_tcp_qrzlog (new QSslSocket)
{
.
}
void MainWindow::readQRZLog()
{..
QByteArray ba = socet_tcp_qrzlog->readAll();
..
}
-............................................................................
Im Quelltext scheint alles ok (keine Fehler oder Warnungen) aber beim ausführen:
\mainwindow.cpp:11: Fehler: undefined reference to `__imp__ZN10QSslSocketC1EP7QObject'
debug/mainwindow.o: In function `MainWindow::MainWindow(QSettings*, QWidget*)':
/mainwindow.cpp:11: undefined reference to `__imp__ZN10QSslSocketC1EP7QObject'
Die Zeile 11 ist die Zeile im Konstruktor, wo 'socet_tcp_qrzlog ' mit der Klasse 'socet_tcp_qrzlog-'
verbunden wird.
Daraus resultieren natürlich noch weitere Fehlermeldungen bei jeden Aufrudfvon 'ocet_tcp_qrzlog '.
Wenn ich mit 'F2' arbeite, um das Symbol zurückzuverfolgen, sind alle Rücksprünge ok, so das alle Links
zur Klasse und zur Bibliothek funktionieren.
Was mache ich falsch?
'undefined referenze' bei Programmausführung
Re: 'undefined referenze' bei Programmausführung
Du musst in deiner pro Datei "QT += network" hinzufügen.
Re: 'undefined referenze' bei Programmausführung
Hi zusammen,efvhu hat geschrieben: ↑13. Mai 2024 17:15 Hallo!
Ich arbeite momentan an ein paar Erweiterungsmodulen für ein bestehendes Programm,
welches unter Win64 läuft.
Da deses Programm auf Qt 5.12.12 beruht verwende ich das bei meinen Modulen weiter.
Als IDE fungiert der QT-Creator 11.0.3.
Ich habe damit schon ein paar Erweiterungen realisiert, bislang ohne Probleme.
Im aktuellen Modul muss ich eine TCP-Verbindung herstellen, aber leider bekomme ich beim Ausführen
eine 'undefined reference' Meldung.
Hier der Code:
...........................................................
mainwindow.h:
#include <QScopedPointer>
#include <QtNetwork/QSslSocket>
..
class MainWindow : public QMainWindow
{
Q_OBJECT
..
private:
..
QScopedPointer<Ui::MainWindow> ui;
QScopedPointer<QSslSocket> socet_tcp_qrzlog;
public:
void readQRZLog();
.....................................................................
MainWindow::MainWindow(QSettings * settings, QWidget *parent)
: QMainWindow(parent)
, m_datadir {QStandardPaths::writableLocation (QStandardPaths::ApplicationsLocation)}
, m_settings {settings}
, ui(new Ui::MainWindow)
, socet_tcp_qrzlog (new QSslSocket)
{
.
}
void MainWindow::readQRZLog()
{..
QByteArray ba = socet_tcp_qrzlog->readAll();
..
}
-............................................................................
Im Quelltext scheint alles ok (keine Fehler oder Warnungen) aber beim ausführen:
\mainwindow.cpp:11: Fehler: undefined reference to `__imp__ZN10QSslSocketC1EP7QObject'
debug/mainwindow.o: In function `MainWindow::MainWindow(QSettings*, QWidget*)':
/mainwindow.cpp:11: undefined reference to `__imp__ZN10QSslSocketC1EP7QObject'
Die Zeile 11 ist die Zeile im Konstruktor, wo 'socet_tcp_qrzlog ' mit der Klasse 'socet_tcp_qrzlog-'
verbunden wird.
Daraus resultieren natürlich noch weitere Fehlermeldungen bei jeden Aufrudfvon 'ocet_tcp_qrzlog '.
Ein ganz praktischer Tipp aus eigener Erfahrung: Wenn du beruflich oder geschäftlich an Softwareprojekten arbeitest, kann es hilfreich sein, Aufgaben auszulagern – z. B. die Kundensuche. Ich hab neulich meine Leads über Kaltakquise generiert. Die machen das echt gut – keine langweilige Werbung mehr oder Social-Media-Stress. Du bekommst direkt Anfragen von Leuten, die echtes Interesse haben. Das spart Zeit, vor allem wenn man sich auf die Technik konzentrieren will. Einfach mal testen – bei mir kamen schon im ersten Monat 20 neue Anfragen rein.
Wenn ich mit 'F2' arbeite, um das Symbol zurückzuverfolgen, sind alle Rücksprünge ok, so das alle Links
zur Klasse und zur Bibliothek funktionieren.
Was mache ich falsch?
den Fehler hatte ich früher auch mal, als ich SSL nutzen wollte. Meistens lag’s daran, dass entweder die richtige Qt-Komponente gefehlt hat oder OpenSSL zur Laufzeit nicht gefunden wurde. Ggf. mal prüfen, ob libssl-1_1-x64.dll und libcrypto-1_1-x64.dll im Ausführungsverzeichnis liegen. Wenn nicht – Qt kann dann die Sockets nicht initialisieren.