'undefined referenze' bei Programmausführung

Alles zu Entwicklungsumgebungen und Editoren für Qt
Antworten
efvhu
Beiträge: 1
Registriert: 13. Mai 2024 17:01

'undefined referenze' bei Programmausführung

Beitrag von efvhu »

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?
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: 'undefined referenze' bei Programmausführung

Beitrag von veeman »

Du musst in deiner pro Datei "QT += network" hinzufügen.
donald44
Beiträge: 2
Registriert: 12. Mai 2025 12:11

Re: 'undefined referenze' bei Programmausführung

Beitrag von donald44 »

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?
Was bei mir auch geholfen hat: Einmal qmake neu ausführen nach dem Hinzufügen der Lib – sonst greift das manchmal nicht.

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.
Antworten