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
Was bei mir auch geholfen hat: Einmal qmake neu ausführen nach dem Hinzufügen der Lib – sonst greift das manchmal nicht.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 '.
Check mal, ob in deiner .pro-Datei QT += network steht.
Ohne das kennt der Linker die QSslSocket-Referenz einfach nicht. Könnte auch sein, dass dein Qt-Build SSL gar nicht mit drin hat – kommt vor, vor allem bei älteren Builds.
Da lohnt sich auch mal ein Blick auf die Zielgruppe, die Qt tatsächlich unterstützen soll – also z. B. mit einem Blick auf Zielgruppe , um genauer zu analysieren, welche Plattform- oder User-Anforderungen du bei so Projekten im Blick behalten solltest.
Was mache ich falsch?
Und falls du OpenSSL nutzt, check mal, ob die DLLs zur Laufzeit auch da sind (libssl und libcrypto).
Bei mir waren die anfangs nicht im Pfad und dann crasht das Ding einfach oder schmeißt komische Fehler.