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

incorrect parameters for compiling MySQL Plugin on Windows 10



  • https://doc.qt.io/qt-5/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows
    this link claims with the that with the following commands you can compile the MySQL plugin on your machine but qmake doesn't have a -- parameter

    cd %QTDIR%\qtbase\src\plugins\sqldrivers
    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
    

    how do i compile the dll? i have all the requirements


  • Lifetime Qt Champion

    @nullbuil7 said in incorrect parameters for compiling MySQL Plugin on Windows 10:

    but qmake doesn't have a -- parameter

    It has, please show the output and also the output of qmake -version



  • PS J:\Qt\Qt5.12.9\5.12.9\mingw73_64\plugins\sqldrivers> qmake -version
    QMake version 3.1
    Using Qt version 5.12.9 in J:/Qt/Qt5.12.9/5.12.9/mingw73_64/lib
    
    PS J:\Qt\Qt5.12.9\5.12.9\mingw73_64\plugins\sqldrivers> qmake -- MYSQL_INCDIR="C:/Program Files/MariaDB/MariaDB Connector C 64-bit/include" MYSQL_LIBDIR="C:/Program Files/MariaDB/MariaDB Connector C 64-bit/lib"
    Usage: J:\Qt\Qt5.12.9\5.12.9\mingw73_64\bin\qmake.exe [mode] [options] [files]
    
    QMake has two modes, one mode for generating project files based on
    some heuristics, and the other for generating makefiles. Normally you
    shouldn't need to specify a mode, as makefile generation is the default
    mode for qmake, but you may use this to test qmake on an existing project
    
    Mode:
      -project       Put qmake into project file generation mode
                     In this mode qmake interprets [files] as files to
                     be added to the .pro file. By default, all files with
                     known source extensions are added.
                     Note: The created .pro file probably will
                     need to be edited. For example add the QT variable to
                     specify what modules are required.
      -makefile      Put qmake into makefile generation mode (default)
                     In this mode qmake interprets files as project files to
                     be processed, if skipped qmake will try to find a project
                     file in your current working directory
    
    Warnings Options:
      -Wnone         Turn off all warnings; specific ones may be re-enabled by
                     later -W options
      -Wall          Turn on all warnings
      -Wparser       Turn on parser warnings
      -Wlogic        Turn on logic warnings (on by default)
      -Wdeprecated   Turn on deprecation warnings (on by default)
    
    Options:
       * You can place any variable assignment in options and it will be *
       * processed as if it was in [files]. These assignments will be    *
       * processed before [files] by default.                            *
      -o file        Write output to file
      -d             Increase debug level
      -t templ       Overrides TEMPLATE as templ
      -tp prefix     Overrides TEMPLATE so that prefix is prefixed into the value
      -help          This help
      -v             Version information
      -early         All subsequent variable assignments will be
                     parsed right before default_pre.prf
      -before        All subsequent variable assignments will be
                     parsed right before [files] (the default)
      -after         All subsequent variable assignments will be
                     parsed after [files]
      -late          All subsequent variable assignments will be
                     parsed right after default_post.prf
      -norecursive   Don't do a recursive search
      -recursive     Do a recursive search
      -set <prop> <value> Set persistent property
      -unset <prop>  Unset persistent property
      -query <prop>  Query persistent property. Show all if <prop> is empty.
      -qtconf file   Use file instead of looking for qt.conf
      -cache file    Use file as cache           [makefile mode only]
      -spec spec     Use spec as QMAKESPEC       [makefile mode only]
      -nocache       Don't use a cache file      [makefile mode only]
      -nodepend      Don't generate dependencies [makefile mode only]
      -nomoc         Don't generate moc targets  [makefile mode only]
      -nopwd         Don't look for files in pwd [project mode only]
    

  • Lifetime Qt Champion

    @nullbuil7 said in incorrect parameters for compiling MySQL Plugin on Windows 10:

    J:\Qt\Qt5.12.9\5.12.9\mingw73_64\plugins\sqldrivers

    I'm pretty sure there are no sources in this directory.



  • fixed the former issue. downloaded the source code and now when i run the qmake command i get this:

    PS J:\Downloads\Compressed\qtbase-5.15.1\qtbase-5.15.1\src\plugins\sqldrivers> qmake -- MYSQL_INCDIR="C:\\MariaDB\\include" MYSQL_LIBDIR="C:\\MariaDB\\lib"
    
    Running configuration tests...
    Done running configuration tests.
    
    Configure summary:
    
    Qt Sql Drivers:
      DB2 (IBM) .............................. no
      InterBase .............................. no
      MySql .................................. yes
      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 'mingw32-make'.
    Once everything is built, you must run 'mingw32-make install'.
    Qt will be installed into 'J:\Qt\Qt5.12.9\5.12.9\mingw73_64'.
    
    Prior to reconfiguration, make sure you remove any leftovers from
    the previous build.
    

    which is an issue of it's own because when i run mingw32-make sub-mysql i get this error and i think maybe it's because it's trying to build other ODBC and SQLite too and gives this error:

    PS J:\Downloads\Compressed\qtbase-5.15.1\qtbase-5.15.1\src\plugins\sqldrivers> mingw32-make.exe sub-mysql
    cd mysql\ && ( if not exist Makefile J:\Qt\Qt5.12.9\5.12.9\mingw73_64\bin\qmake.exe -o Makefile J:\Downloads\Compressed\qtbase-5.15.1\qtbase-5.15.1\src\plugins\sqldrivers\mysql\mysql.pro ) && J:/Qt/Qt5.12.9/5.12.9/mingw73_64/bin/mingw32-make -f Makefile
    mingw32-make[1]: Entering directory 'J:/Downloads/Compressed/qtbase-5.15.1/qtbase-5.15.1/src/plugins/sqldrivers/mysql'
    J:/Qt/Qt5.12.9/5.12.9/mingw73_64/bin/mingw32-make -f Makefile.Release all
    mingw32-make[2]: Entering directory 'J:/Downloads/Compressed/qtbase-5.15.1/qtbase-5.15.1/src/plugins/sqldrivers/mysql'
    g++ -c -fno-keep-inline-dllexport -O2 -std=c++1z -fno-exceptions -Wall -W -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql\5.12.9 -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql\5.12.9\QtSql -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\5.12.9 -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\5.12.9\QtCore -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore -I.moc\release -I"C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include" -IC:\openssl\include -IC:\Utils\my_sql\mysql-5.6.11-winx64\include -IC:\Utils\postgresql\pgsql\include -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\mkspecs\win32-g++  -o .obj\release\qsql_mysql.o qsql_mysql.cpp
    process_begin: CreateProcess(NULL, g++ -c -fno-keep-inline-dllexport -O2 -std=c++1z -fno-exceptions -Wall -W -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_JAVA_STYLE_ITERATORS -DQT_DEPRECATED_WARNINGS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql\5.12.9 -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql\5.12.9\QtSql -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\5.12.9 -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\5.12.9\QtCore -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtSql -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\include\QtCore -I.moc\release "-IC:\Program Files\MariaDB\MariaDB Connector C 64-bit\include" -IC:\openssl\include -IC:\Utils\my_sql\mysql-5.6.11-winx64\include -IC:\Utils\postgresql\pgsql\include -IJ:\Qt\Qt5.12.9\5.12.9\mingw73_64\mkspecs\win32-g++ -o .obj\release\qsql_mysql.o qsql_mysql.cpp, ...) failed.
    make (e=2): The system cannot find the file specified.
    mingw32-make[2]: *** [Makefile.Release:391: .obj/release/qsql_mysql.o] Error 2
    mingw32-make[2]: Leaving directory 'J:/Downloads/Compressed/qtbase-5.15.1/qtbase-5.15.1/src/plugins/sqldrivers/mysql'
    mingw32-make[1]: *** [Makefile:42: release-all] Error 2
    mingw32-make[1]: Leaving directory 'J:/Downloads/Compressed/qtbase-5.15.1/qtbase-5.15.1/src/plugins/sqldrivers/mysql'
    mingw32-make: *** [Makefile:42: sub-mysql] Error 2
    

    in any case it doesn't compile yet.


  • Lifetime Qt Champion

    make (e=2): The system cannot find the file specified.

    You have to run it in your Qt command prompt where g++ is available.

    "-IC:\Program Files\MariaDB\MariaDB Connector C 64-bit\include"

    This does not look correct when you pass C:\MariaDB\include. Please remove all created files and start over. After configure take a look into config.log to see where it really finds the mysql include files and libs.



  • qsql_mysql.cpp:1243:65: error: 'SkipEmptyParts' is not a member of 'Qt'
         const QStringList opts(connOpts.split(QLatin1Char(';'), Qt::SkipEmptyParts));
                                                                     ^~~~~~~~~~~~~~
    

  • Lifetime Qt Champion

    You're mixing different Qt versions. Clean up again and make sure to call the correct qmake.exe for Qt5.12.9



  • first thanks for the replies they've been of great help. I managed to make and install MySQL using visual build tools 2017 and MySQL Connector C 6.1 BUT:
    now MySQL is only added to the list of sql plugin drivers and this code:

    #include <QCoreApplication>
    #include <QtSql>
    #include <QSqlDatabase>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1");
        db.setPort(3306);
        db.setDatabaseName("test");
        db.setUserName("testuser");
        db.setPassword("123");
        if (db.open())
        {
            qDebug() << "Connected!";
            return 0;
        }
        else
        {
            qDebug() << "Failed to Connect.";
            return -1;
        }
    
        return a.exec();
    }
    

    returns:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
    Failed to Connect.
    Press <RETURN> to close this window...
    

    Obviously some lib file is missing. how do i resolve this?

    (PS: Got it working with PosgreSql : )


  • Lifetime Qt Champion

    @nullbuil7 said in incorrect parameters for compiling MySQL Plugin on Windows 10:

    Obviously some lib file is missing. how do i resolve this?

    Please please use the forum search function - this question is asked at least twice per week. You're most likely missing some dependency dlls for the mysql plugin when running your app.



  • but I do have all the dlls and lib files

        Directory: J:\Qt\Qt5.12.9\5.12.9\msvc2017_64\plugins\sqldrivers
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----         12/4/2020  12:32 AM        1199104 qsqlite.dll
    -a----         12/4/2020  12:32 AM        1867776 qsqlited.dll
    -a----         12/4/2020  12:31 AM          88576 qsqlodbc.dll
    -a----         12/4/2020  12:31 AM         208896 qsqlodbcd.dll
    -a----         6/11/2020  11:42 AM          76920 qsqlpsql.dll
    -a----         6/11/2020  11:42 AM         183928 qsqlpsqld.dll
    -a----         12/4/2020  12:31 AM          62464 qsqlmysql.dll
    -a----         12/4/2020  12:31 AM        1732608 qsqlmysql.pdb
    -a----         12/4/2020  12:31 AM         181248 qsqlmysqld.dll
    -a----         12/4/2020  12:31 AM        1863680 qsqlmysqld.pdb
    -a----         12/4/2020  12:31 AM        1748992 qsqlodbc.pdb
    -a----         12/4/2020  12:31 AM        1798144 qsqlodbcd.pdb
    -a----         12/4/2020  12:32 AM        5042176 qsqlite.pdb
    -a----         12/4/2020  12:32 AM        3772416 qsqlited.pdb
    

    anyway I'm using PostgreSQL for now but I do want this bug fixed


  • Lifetime Qt Champion

    @nullbuil7 said in incorrect parameters for compiling MySQL Plugin on Windows 10:

    but I do have all the dlls and lib files

    No you don't have - as I said please use the forum search function. Your sql plugin needs some additional dlls like e.g. the postgresql library...


Log in to reply