How to fix "LNK2019 unresolved external symbol" error?

305 views Asked by At

I need to use C++ and Qt VS Tools in a project in Visual Studio 2022.

If I try to work with QtSql, I should include some specific libraries like <QtSql/QSqlDatabase>, <QtSql/QSqlError>, <QtSql/QSqlQuery>, but after initializing the Local Windows Debugger, I got this sort of errors:

Severity          : Error
Code              : LNK2019
Description       : unresolved external symbol "__declspec(dllimport) public: __cdecl QSqlDatabase::QSqlDatabase(void)" (_`_`imp`_`??0QSqlDatabase@@QEAA@XZ) referenced in function "private: void __cdecl LoginPage::onLoginButtonClicked(void)" (?onLoginButtonClicked@LoginPage@@AEAAXXZ)
Project           : StockManager
File              : D:\POO-P\StockManager\StockManager\LoginPage.obj
Line              : 1
Suppression State :

Header file:

#pragma once

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
#include "ui_LoginPage.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>

class LoginPage : public QWidget
{
    Q_OBJECT

public:
    explicit LoginPage(QWidget* parent = nullptr);

    QPushButton* getLoginButton() const { return loginButton; }
    QPushButton* getRegisterButton() const { return registerButton; }
    bool createConnection();
   
    ~LoginPage();

private slots:
    void onLoginButtonClicked();
    void onRegisterButtonClicked();

signals:
    void authenticationSuccessful();

private:
    QPushButton* loginButton;
    QPushButton* registerButton;
    QLineEdit* usernameLineEdit;
    QLineEdit* passwdLineEdit;
    Ui::LoginPageClass* ui;
};

Source file:

#include "LoginPage.h"

LoginPage::LoginPage(QWidget* parent) : QWidget(parent), ui(new Ui::LoginPageClass)
{
    ui->setupUi(this);
    ui->passwdLineEdit->setEchoMode(QLineEdit::Password);

    loginButton = ui->loginButton;
    registerButton = ui->registerButton;

    createConnection();

    connect(ui->loginButton, &QPushButton::clicked, this, &LoginPage::onLoginButtonClicked);
    connect(ui->registerButton, &QPushButton::clicked, this, &LoginPage::onRegisterButtonClicked);
}


bool LoginPage::createConnection() {
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("BOGDAN");
    db.setDatabaseName("Driver={SQL Server Native Client 11.0};Server=BOGDAN;Database=StockManager;Trusted_Connection=yes;");

    if (!db.open()) {
        qDebug() << "Connection failed" << db.lastError().text();
        return false;
    }
    else {
        qDebug() << "Successfully connected!";
        return true;
    }
}


void LoginPage::onLoginButtonClicked()
{
    QString username = ui->usernameLineEdit->text();
    QString password = ui->passwdLineEdit->text();

    QSqlQuery query;
    query.prepare("SELECT * FROM Users WHERE Username = :username AND Password = :password");
    query.bindValue(":username", username);
    query.bindValue(":password", password);
    if (query.exec() && query.next()) {
        emit authenticationSuccessful();
    }
    else {
        // Invalid login
    }
}

void LoginPage::onRegisterButtonClicked()
{
    // ... codul tău aici
}

LoginPage::~LoginPage() {
    // nu mai este necesar să ștergi ui manual
}

I know that it's a linker problem, but I tried to go to Project Properties -> Linker -> Input -> Add dependencies, and added Qt5Sql.lib and Qt5Sqld.lib, but it doesn't work, here's what I get:

Code        : LNK1104
Description : cannot open file 'Qt5Sqld.lib'
Project     : StockManager
File        : D:\POO-P\StockManager\StockManager\LINK
Line        : 1
0

There are 0 answers