Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?



  • I am wondering, why the Qt team does not consider to use new build tools? It still uses the tools which belong to 4 years ago, but now many users are using MSVC 2019, and next soon will jump to the more newer version. I think the best way is to consider the current development environment, I saw many people against this problem.

    I am afraid in the next version they still using MSVC 2017.


  • Lifetime Qt Champion

    Hi @BAHRAMUDIN-ADIL,

    you can compile Qt yourself with any compiler you like.

    The pre-build version is still on MSVC2017 for maximum compatibility. As MSVC2019 is fully compatible with that, you can still use the newer compiler for your apps.

    Regards


  • Lifetime Qt Champion

    Hi,

    To add to @aha_1980, if you want a more official answer, then you should bring that question to the interest mailing list.



  • @aha_1980 Yes I know to compile, but compiling needs its own tools and environment, which not all the users will have it, so it is not a good solution. Why I am asking this? Because I getting an error with MSVC 2019 which is installed in my machine, but the Qt asks me for the 2017 version which I do not have and do not want to have.


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    Because I getting an error with MSVC 2019

    Which error exactly?

    I'm using Qt 5.14.1/MSVC2017 together with MSVC2019 and that seems to work.

    Regards



  • @aha_1980 The first thing is the warning which Qt gives me which says: Qt is not compatible with MSVC 2019. OK, this is a warning so skip it.

    But the error is I am not able to use MySQL drivers to connect to the database, I have already added the DLL and libs into Qt bin and in my project as well, but still not working and gives error while compiling, and when I switch to another machine which has the same version of Qt but MSVC 2017 installed it works well. Then how to explain this?

    Thanks!


  • Moderators

    The Qt Framework is big, has lots of features and modules and classes.

    If the new compiler only has marginal changes (like one clang/gcc version to an other) you can rather safely upgrade/support the new version after reading the changelog.

    Microsoft until recently, totally broke binary compatibility with each MSVC release and god only knows what they are currently doing.

    So upgrading / supporting a new MSVC version will require extensive testing and I assume that's simply not yet done/finished.

    I personally already run into Qtmsvc2017 and 2019 incompatibility issues. The Qt support answered me with: Thanks for the report we will look into it, but 2019 is not yet officially supported, we suggest to use 2017.
    And that's what I ended up doing.

    I only used msvc2019 in the first place, because MS makes ist unnecessarily difficult to download older compiler version!😡

    What msvc2019 feature is so important that you have to use that compiler ?

    gives error while compiling,

    what error?



  • @J-Hilk Thanks for the explanation. I know it is not an easy job needs a lot of tests, but on the other hand, if you persist to do not support the newer version, then it may cause to lose your users by the time because people they going to use the newer version and leave the older one some of them because of security problem, some of them maybe because of compatibility problem.
    You asked me why I want to use MSVC 2019? It is because I am using some libs which recommended to MSVC 2019. And our team development is based on MSVC 2019.



  • @J-Hilk One problem I am getting while using Qt with MSVC 2019, my code not getting compiled:

    main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase@@QEAA@XZ) referenced in function main
    

    But same code works well with Qt + MSVC 2017.


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    But same code works well with Qt + MSVC 2017.

    I doubt that - I would guess you don't link against the Qt sql library. Please show us your .pro file and/or make sure you're linking against the correct libraries you need.



  • @Christian-Ehrlicher It is the .pro file content:

    QT -= gui
    
    CONFIG += c++11 console sql
    CONFIG -= app_bundle
    
    # The following define makes your compiler emit warnings if you use
    # any Qt feature that has been marked deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if it uses deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    SOURCES += \
            main.cpp
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    

    I have all the DLL and libs files in the Qt installed location bin/lib folder.



  • According to the documentation (https://doc.qt.io/qt-5/qsqldatabase.html) you should add

    QT += sql
    

    to your .pro file. This tells the compiler to link with the SQL plugin.



  • @SimonSchroeder Thanks! I will try it.


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    @SimonSchroeder If you see carefully I have already added sql

    To the wrong variable. You added it to CONFIG but you shall add it to QT as @SimonSchroeder wrote.

    [edit: Answer to the original post SGaist]



  • @SimonSchroeder Yes, I did not add the SQL module correctly in .pro file. But now I got this error:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
    


  • @SGaist Hmmm, yes, it was my fault, but now I got the next error, what is your opinion?
    I have already added these two DLL files in Qt bin directory:

    libmysqld.dll
    libmysql.dll
    

    And also I have tried these three as well:

    ssleay32.dll
    libeay32.dll
    libmysql.lib
    

    Also not solved the problem.


  • Moderators

    @BAHRAMUDIN-ADIL
    after modifying your pro file, ALWAYS clean and run qmake

    you added a new module so I would go a step further and delete the build directory for a complete rebuild



  • @J-Hilk Yes, I did that as you said, but the problem still exists. Can you tell me what files and libs I need to add and add them in which place? Thanks!


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

    As you can see from the listing, you don't have the plugin at all.

    As for why: the licensing of MySQL changed so only GPL and Commercial are available now. Since the pre-built binaries are usable also under the LGPL, the plugin can't be provided.

    You also have the option of building it with MariaDB which fixes the licensing issue.

    See QTBUG-78241



  • @SGaist You mean that I need to build Qt from source with the needed plugins? Or I just need to build the MySQL plugin? If the second case is right, then to build the only plugin, what should I need, and how to build? Is there any guide to show how to build?
    Thanks!


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL

    you need to build the plugin as described here: https://doc.qt.io/qt-5/sql-driver.html#qmysql

    Regards



  • @aha_1980 Yes, before you send me the answer I saw this documentation, but can you tell me where is it?

    cd %QTDIR%\qtbase\src\plugins\sqldrivers
    

    I did not find in whole Qt installation directory.

    Thank you so much!!!


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    I did not find in whole Qt installation directory.

    As you can see there is 'src' - you need the Qt sources...



  • @Christian-Ehrlicher Hmmm, so for a small plugin I need to download the whole Qt source code? It definitely takes a lot of time and takes much space. I think the Qt team should think about it to make it easy just to download only what I need not all the source code or provide some other way to overcome this problem because MySql users are very a lot on all over the world. If all the users download the source code it will so be extra pressure on Qt side server and also not good user experience.

    I hope the Qt becomes more beautiful in the feature!!


  • Lifetime Qt Champion

    @BAHRAMUDIN-ADIL You don't need to tell us - we are just users like you and not related to the Qt company.

    You might also want to use the MariaDB plugin which does not have the MySQL licence restrictions.

    Btw: you can download the sources with the MaintenanceTool.

    Regards



  • @aha_1980 What is the problem with the following output? I did everything step by step as the document, but why I am getting this error?
    Note: I am using MySql 8 and installed successfully and there is no problem with MySql server.

    C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Server 8.0/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Server 8.0/lib"
    Info: creating stash file C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers\.qmake.stash
    
    Running configuration tests...
    Checking for DB2 (IBM)... no
    Checking for InterBase... no
    Checking for MySQL... no
    Checking for OCI (Oracle)... no
    Checking for ODBC... yes
    Checking for PostgreSQL... no
    Checking for SQLite (version 2)... no
    Checking for TDS (Sybase)... no
    Done running configuration tests.
    
    Configure summary:
    
    Qt Sql Drivers:
      DB2 (IBM) .............................. no
      InterBase .............................. no
      MySql .................................. no
      OCI (Oracle) ........................... no
      ODBC ................................... yes
      PostgreSQL ............................. no
      SQLite2 ................................ no
      SQLite ................................. yes
        Using system provided SQLite ......... no
      TDS (Sybase) ........................... no
    
    Qt is now configured for building. Just run 'nmake'.
    Once everything is built, you must run 'nmake install'.
    Qt will be installed into 'C:\Qt\5.14.0\msvc2017_64'.
    
    Prior to reconfiguration, make sure you remove any leftovers from
    the previous build.
    
    
    C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers>nmake sub-mysql
    
    Microsoft (R) Program Maintenance Utility Version 14.24.28316.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    NMAKE : fatal error U1073: don't know how to make 'sub-mysql'
    Stop.
    
    C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers>
    

  • Lifetime Qt Champion

    Take a closer look at the configure test logs to see exactly why the detection failed.



  • @SGaist Still it is throwing error, I going to not use Qt anymore, and go for Java, the best and the easy language all over the word it is why Java is always on the top of all of the languages.


  • Lifetime Qt Champion

    Without the information located in the test logs it's impossible to know what is going on.



  • @SGaist OK, I will tell you what is going on. First of all, every step is done according to the documentation.
    It is what did I try and what did I get:
    I have MySql 8 installed on my machine, and works well Java, command line, and other database tools and software.
    Because of the license problem the Qt team not provide MySql driver anymore and must be compiled by the user. For this, I downloaded and reinstalled Qt with source code, which took me a lot of time and wasted me a lot of internets and disk space (which is a very bad user experience).
    Then I start to compile the source code of the MySql drive, first I tried the documentation way, there are three commands need to execute:

    qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/lib"
    nmake sub-mysql
    nmake install
    

    The first command executed without error, but from the log which I sent here in before post, it says that did not find MySql:

    Running configuration tests...
    Checking for DB2 (IBM)... no
    Checking for InterBase... no
    Checking for MySQL... no
    Checking for OCI (Oracle)... no
    Checking for ODBC... yes
    Checking for PostgreSQL... no
    Checking for SQLite (version 2)... no
    Checking for TDS (Sybase)... no
    Done running configuration tests.
    
    Configure summary:
    
    Qt Sql Drivers:
      DB2 (IBM) .............................. no
      InterBase .............................. no
      MySql .................................. no
      OCI (Oracle) ........................... no
      ODBC ................................... yes
      PostgreSQL ............................. no
      SQLite2 ................................ no
      SQLite ................................. yes
        Using system provided SQLite ......... no
      TDS (Sybase) ........................... no
    

    And then when I execute the second command it shows error:

    C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers>nmake sub-mysql
    
    Microsoft (R) Program Maintenance Utility Version 14.24.28316.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    NMAKE : fatal error U1073: don't know how to make 'sub-mysql'
    Stop.
    

    It is what I got when running the commands, I don't know where I am wrong, I did every step as the documentation says.

    The second way I have tried is: I opened Qt-Creator and then import the mysql project, and then when I build the project, it says:

    Project ERROR: Library 'mysql' is not defined.
    

    Then in .pro file I configured MySql lib and include dir also the same error.

    The third way I have installed Qt-VS tools for Microsoft Visual Studio, and then when I open the project in the Visual Studio, then also shows errors the project not opened:

    --- (Import): Generating new project of mysql.pro file
    --- (qmake) : Using: C:\QT\5.14.1\MSVC2017_64\bin\qmake
    --- (qmake) : Working Directory: C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
    --- (qmake) : Arguments: -tp vc "mysql.pro" -o "mysql.vcxproj" QMAKE_INCDIR_QT=$(QTDIR)\include QMAKE_LIBDIR=$(QTDIR)\lib QMAKE_MOC=$(QTDIR)\bin\moc.exe QMAKE_QMAKE=$(QTDIR)\bin\qmake.exe
    
    [1] - Info: creating stash file C:\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers\.qmake.stash
    
    --- (Import): Success: 1
    [1] - Cannot read C:/Qt/5.14.1/Src/qtbase/src/plugins/sqldrivers/qtsqldrivers-config.pri: No such file or directory
    [2] - Project ERROR: Library 'mysql' is not defined.
    
    --- (Import): Error(s): 2
    --- (qmake) : Exit Code: 3
    

    Then you say what should I do? In the 21st Century even one small plugin not getting compiled by Qt.


  • Moderators

    @BAHRAMUDIN-ADIL said in Qt already updated to 5.14.1, but why it still uses MSVC 2017 build tools?:

    I have MySql 8

    ...

    qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/lib"
    

    You told qmake to use MySQL 6.1, not MySQL 8.0.

    Note: MySQL 8.0 has a different folder structure than previous versions. Check your MySQL installation folder to find the correct paths to the include and lib folders.

    I downloaded and reinstalled Qt with source code, which took me a lot of time and wasted me a lot of internets and disk space

    For future reference, you don't need to re-install Qt to get the source code. You have 2 options:



  • @JKSH Thanks! I know the command, I pasted that command from the documentation, when I executed I modified the command for my self. I am not new to coding I have 10 years experience with coding. So I know these basic steps.

    qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Server 8.0/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Server 8.0/lib"
    

    The second one I also know how to install to and modify the Qt installation by MaintenanceTool which will be installed when installing Qt.

    I did a fresh installation to there do not be any reason for the compatibility between source code and the installed binary packages.

    I saw there a lot of shortcomings in the Qt framework. I did not remember using Qt without a problem, the problem which takes so much time to solve.


Log in to reply