Połączenie Qt Creator z bazą danych MySQL

0

Dzień dobry. Pracuję aktualnie nad aplikacją, która ma współpracować z baza danych MySQL. Zainstalowałem XAMPP oraz utworzyłem bazę danych MySQL. Przy próbie nawiązania połączenia z bazą wyskoczył mi błąd dotyczący sterownika QMYSQL:

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

Po przeszukaniu sieci zauważyłem, że jest to dość znany błąd w przypadku Qt Creator. Znalazłem dużo rozwiązań, czy to polegających na dodaniu kilku plików, czy na ręcznym buildzie sterownika. Niestety żadne mi nie pomogło. Czego już próbowałem:

  1. Próbowałem ręcznie pobrać oraz dodać pliki libmysql.dll oraz libmysqld.dll do folderu debug: P:\Repositories\build-ATLAS-Desktop_Qt_6_1_3_MinGW_64_bit-Debug\debug

    Nie pomogło.

  2. Próbowałem skopiować z folderu XAMPP pliki libmysql.dll oraz libmysqld.dll i wkleić do D:\Qt\6.1.3\mingw81_64\bin

    Nie pomogło.

  3. Próbowałem dodać bibliotekę przez Qt Creator :

win32: LIBS += -L'D:/Program Files/MySQL/MySQL Connector C 6.1/lib/' -llibmysql

INCLUDEPATH += 'D:/Program Files/MySQL/MySQL Connector C 6.1/include'
DEPENDPATH += 'D:/Program Files/MySQL/MySQL Connector C 6.1/include'

Niestety to również nic nie dało.

  1. W końcu zdecydowałem się zrobić build sterownika wg tego poradnika: https://doc.qt.io/qt-5/sql-driver.html#qmysql

    Zainstalowałem MySQL Connector C 6.1.11, sprawdziłem czy są wszystkie pliki i następnie uruchomiłem Qt 6.1.3 (MinGW 8.1.0 64-bit).
    Podałem lokalizacje sqldrivers tj.: cd D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers
    Kolejną rzeczą był qmake: qmake -- MYSQL_INCDIR="D:\Program Files\MySQL\MySQL Connector C 6.1\include" D:\Program Files\MySQL\MySQL Connector C 6.1\lib"
    Przy próbie wpisania komendy mingw32-make pojawił się błąd:

mingw32-make: *** No targets specified and no makefile found.  Stop.

Poniżej cały kod z cmd:

Setting up environment for Qt usage...

D:\Qt\6.1.3\mingw81_64>cd D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers

D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="D:\Program Files\MySQL\MySQL Connector C 6.1\include" D:\Program Files\MySQL\MySQL Connector C 6.1\lib"
Usage: qmake [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 qt6.conf, then 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]

D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers>mingw32-make
mingw32-make: *** No targets specified and no makefile found.  Stop.

D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers>

Próbowałem również wykorzystać Mariadb Connector C 3.1.5 ale bez efektów.

Wrzucam również informację o wersji poszczególnych programów:

Qt Creator 5.0.1 Community
Qt 6.1.3 (MinGW 8.1.0 64-bit)
Qt 6.1.3 (MSVC 2019 64-bit)
XAMPP Control Panel v3.3.0
MySQL Connector C 6.1
MySQL Server 5.5

Nie będę ukrywał, że jeśli chodzi o dodawanie/wgrywanie zewnętrznych bibliotek/plików do Qt Creator jest to dla mnie (nadal) czarna magia. Ostatnio w podobny sposób męczyłem się z Popplerem i w końcu odpuściłem. Mam nadzieję , że tym razem będzie inaczej.

Nie mam zielonego pojęcia jak wgrać ten sterownik do Qt Creator, żeby wszystko działało. Jeżeli ktoś ma jakiś pomysł lub chociaż wskazówkę będę bardzo wdzięczny.
Z góry dziękuję i życzę miłego dnia.

2

Błędnie wpisałeś/skopiowałeś polecenie qmake, powinno być tak

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"
1

Ogladam folder src/plugins/sqldrivers tutaj https://github.com/qt/qtbase/tree/dev/src/plugins/sqldrivers
I nie widze tam Makefile
wiec mingw32-make nie zadziala
za to widze CMakeLists.txt wiec trzeba uzyc cmake

Pytający ma QT 6.1.3 wiec lepiej przeczytac to https://doc.qt.io/qt-6/sql-driver.html

1

0

@several: Próbowałem poprawić ścieżki, ale nic to nie dało.

@Adamek Adam: Postępowałem zgodnie z instrukcją na tej stronie: https://doc.qt.io/qt-6/sql-driver.html#qmysql

Po wpisaniu : qt-cmake -G Ninja D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.1.3\mingw81_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql"

Pojawił się błąd: '"cmake"' is not recognized as an internal or external command,
operable program or batch file.

Poniżej cały kod z konsoli:

Setting up environment for Qt usage...

D:\Qt\6.1.3\mingw81_64>cd D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers

D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers>qt-cmake -G Ninja D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.1.3\mingw81_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql"
'"cmake"' is not recognized as an internal or external command,
operable program or batch file.

D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers>

@MarekR22: Próbowałem zrobić builda wg wideo które wstawiłeś, ale w folderze D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers\mysql nie mam pliku projektu mysql.pro.

Czy reinstall Qt Creator coś pomoże czy raczej nie bardzo?
Pozdrawiam

1

Nie wiem co masz zainstalowane, może to kwestia ścieżki bezwzględnej do CMake (wtedy podajesz całość po prostu), może jego braku. W tym drugim przypadku możesz CMake doinstalować z QT Maintenance toola.

1

Jesteś już bardzo blisko !!!

Zainstaluj proszę Everything ze strony https://www.voidtools.com/ a potem poszukaj czy nie masz cmake.exe na dysku
ja celuje w lokalizacje D:\Qt\Tools\CMake_64\bin\cmake.exe

Jak nie masz to ściągnij !

potem dodaj do PATH katalog gdzie jest cmake.exe

I uruchom ponownie qt-cmake

AHA ! Sciagnij też program ninja.exe (o ile nie masz go )
ja celuje w lokalizacje D:\Qt\Tools\Ninja\ninja.exe

Generalnie:

  1. Przeczytaj opis błedu
  2. Zrozum błąd i napraw
  3. Uruchom ponownie jak nie działa GOTO 1

Video które podał @MarekR22 jest do Qt5 gdzie jest qmake , w nowym Qt używamy cmake ;)

0

@Adamek Adam: Zrobiłem tak jak kazałeś i po ponownym uruchomieniu qt-cmake coś się ruszyło. Niestety po wpisaniu komendy cmake --build . wyskoczył błąd dotyczący Ninja ( sprawdziłem i mam zarówno cmake.exe jak i ninja.exe):

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>cmake --build .
ninja: error: 'D:/mysql-8.0.28-winx64/lib/libmysql', needed by 'mysql/CMakeFiles/QMYSQLDriverPlugin_autogen_timestamp_deps', missing and no known rule to make it

Wygląda na to, że czegoś brakuje, tylko nie bardzo wiem czego. Ścieżki: mysql/CMakeFiles/QMYSQLDriverPlugin_autogen_timestamp_deps nie moge znaleźć. Próbowałem wyszukać czegoś w internecie, ale nie znalazłem wskazówek. Wydaje mi się jakby było trzeba dodać "D:/mysql-8.0.28-winx64/lib/libmysql" do jakiegoś pliku. Problem polega na tym, że nie wiem gdzie to wrzucić :/

1

Mała podpowiedź na ostateczność. Jak nie uda Ci się uruchomić tej biblioteki i wyczerpiesz wszystkie problemy i rozwiązania, to proponuję ODBC, który jest na wyposażeniu Qt. Wtedy są dwa tematy. Pierwszy to konfiguracja sterownika ODBC, drugi to podłączenie się do bazy danych przez ODBC i tu niekoniecznie MySQL.

Jakiś czas temu podłączyłem się z Qt Creatora do MS SQL przez ODBC bez problemu, myślę, że z MySQL będzie tak samo. Konfiguracja sterownika ODBC to już bardziej temat bazy danych niż programowania w Qt.

Nie pamiętam, jak to się robi, bo to było dawno, ale na 80% nie było jakiejś skomplikowanej konfiguracji, co najwyżej chyba do pliku *.pro trzeba było coś dopisać, potem w kodzie dodać odpowiednie #include i to wszystko.

1

Już widzę jak dobiegasz do METY !
zabrakło 4 znaków ".dll"

-DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"

0

@Adamek Adam: Fatalne niedopatrzenie :) Poszło :) Kolejny błąd, tym razem po wpisaniu cmake --build . Coś się zbudowało, ale na koniec wyskoczyło:

:/Qt/6.1.3/mingw81_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"

ninja: build stopped: subcommand failed.
1

A jaki kompilator buduje mingw81_64 ? (wynik cmake pokazuje C:/Qt/Tools/mingw810_64/bin/c++.exe ?)

Przed uruchomieniem ustaw środowisko tak aby nic nie mieszalo np.

set PATH=d:\Qt\Tools\CMake_64\bin;d:\Qt\Tools\Ninja;d:\Qt\6.1.3\mingw81_64\bin;d:\Qt\Tools\mingw810_64\bin;c:\windows\system32

I wyczyść folder budowania (albo zbuduj w innym folderze)

0

@Adamek Adam: Wyczyściłem zawartość folderu build-sqldrivers i ustawiłem środowisko:

Następnie jeszcze raz uruchomiłem całość i pojawił się podobny błąd. Poniżej wrzucam cały kod:

Setting up environment for Qt usage...

D:\Qt\6.1.3\mingw81_64>cd build-sqldrivers

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>qt-cmake -G Ninja D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.1.3\mingw81_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
-- The CXX compiler identification is GNU 8.1.0
-- The C compiler identification is GNU 8.1.0
-- The ASM compiler identification is GNU
-- Found assembler: D:/Qt/Tools/mingw810_64/bin/gcc.exe
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Qt/Tools/mingw810_64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Qt/Tools/mingw810_64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Check for feature set changes
-- Could NOT find DB2 (missing: DB2_INCLUDE_DIR DB2_LIBRARY)
-- Found MySQL: D:/mysql-8.0.28-winx64/lib/libmysql.dll
-- Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR)
-- Could NOT find Oracle (missing: Oracle_LIBRARY Oracle_INCLUDE_DIR)
-- Found ODBC: libodbc32.a
-- Could NOT find SQLite3 (missing: SQLite3_INCLUDE_DIR SQLite3_LIBRARY)
-- Could NOT find Interbase (missing: Interbase_LIBRARY Interbase_INCLUDE_DIR)
-- Performing Test HAVE_DASH_UNDEFINED_SYMBOLS
-- Performing Test HAVE_DASH_UNDEFINED_SYMBOLS - Success
-- Performing Test HAVE_DASH_DASH_NO_UNDEFINED
-- Performing Test HAVE_DASH_DASH_NO_UNDEFINED - Success
-- The following packages have been found:

 * Qt6BuildInternals
 * Qt6CoreTools (required version >= 6.1.3)
 * Qt6Core
 * Qt6Sql
 * Qt6 (required version >= 6.1.0)
 * MySQL, MySQL client library, <https://www.mysql.com>
 * ODBC

-- The following OPTIONAL packages have not been found:

 * DB2, IBM DB2 client library, <https://www.ibm.com>
 * PostgreSQL
 * Oracle, Oracle client library, <https://www.oracle.com>
 * SQLite3
 * Interbase, Interbase client library, <https://www.embarcadero.com/products/interbase>

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite ................................. yes
    Using system provided SQLite ......... no

-- Configuring done
-- Generating done
-- Build files have been written to: D:/Qt/6.1.3/mingw81_64/build-sqldrivers

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>cmake --build .
[7/22] Automatic MOC for target QODBCDriverPlugin
FAILED: odbc/QODBCDriverPlugin_autogen/timestamp odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp
cmd.exe /C "cd /D D:\Qt\6.1.3\mingw81_64\build-sqldrivers\odbc && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_autogen D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/CMakeFiles/QODBCDriverPlugin_autogen.dir/AutogenInfo.json RelWithDebInfo && D:\Qt\Tools\CMake_64\bin\cmake.exe -E touch D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_transform_depfile Ninja gccdepfile D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc D:/Qt/6.1.3/mingw81_64/build-sqldrivers D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/deps D:/Qt/6.1.3/mingw81_64/build-sqldrivers/CMakeFiles/d/5133c32f3c35421f7708f027879591e5919ed37a5e086c79c17338c197813494.d"

AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/main.cpp"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/main.moc"
included by
  "SRC:/odbc/main.cpp"

Command
-------
D:/Qt/6.1.3/mingw81_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN32_WINNT=0x0601 -D_WIN64 -ID:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.1.3/mingw81_64/include/QtCore -ID:/Qt/6.1.3/mingw81_64/include -ID:/Qt/6.1.3/mingw81_64/mkspecs/win32-g++ -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3/QtCore -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3/QtSql -ID:/Qt/6.1.3/mingw81_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/main.moc D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc/main.cpp

Output
------
:/Qt/6.1.3/mingw81_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"


AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/qsql_odbc_p.h"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp"
included by
  "SRC:/odbc/qsql_odbc.cpp"

Command
-------
D:/Qt/6.1.3/mingw81_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN32_WINNT=0x0601 -D_WIN64 -ID:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.1.3/mingw81_64/include/QtCore -ID:/Qt/6.1.3/mingw81_64/include -ID:/Qt/6.1.3/mingw81_64/mkspecs/win32-g++ -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3/QtCore -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3/QtSql -ID:/Qt/6.1.3/mingw81_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc_p.h

Output
------
:/Qt/6.1.3/mingw81_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"

[9/22] Automatic MOC for target QMYSQLDriverPlugin
ninja: build stopped: subcommand failed.

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>
1

[1] A kod z GIT-a też nie działa https://github.com/qt/qtbase/tree/6.1.3 ?
[2] wpisz komendy do BAT

set PATH=d:\Qt\Tools\CMake_64\bin;d:\Qt\Tools\Ninja;d:\Qt\6.1.3\mingw81_64\bin;d:\Qt\Tools\mingw810_64\bin;c:\windows\system32
qt-cmake -G Ninja D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.1.3\mingw81_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
pause

I to uruchom ?

0

@Adamek Adam: Podmieniłem na kod z GIT i nadal występuje podobny błąd:

Setting up environment for Qt usage...

D:\Qt\6.1.3\mingw81_64>cd build-sqldrivers

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>qt-cmake -G Ninja D:\Qt\6.1.3\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.1.3\mingw81_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
-- The CXX compiler identification is GNU 8.1.0
-- The C compiler identification is GNU 8.1.0
-- The ASM compiler identification is GNU
-- Found assembler: D:/Qt/Tools/mingw810_64/bin/gcc.exe
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Qt/Tools/mingw810_64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Qt/Tools/mingw810_64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Check for feature set changes
-- Could NOT find DB2 (missing: DB2_INCLUDE_DIR DB2_LIBRARY)
-- Found MySQL: D:/mysql-8.0.28-winx64/lib/libmysql.dll
-- Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR)
-- Could NOT find Oracle (missing: Oracle_LIBRARY Oracle_INCLUDE_DIR)
-- Found ODBC: libodbc32.a
-- Could NOT find SQLite3 (missing: SQLite3_INCLUDE_DIR SQLite3_LIBRARY)
-- Could NOT find Interbase (missing: Interbase_LIBRARY Interbase_INCLUDE_DIR)
-- Performing Test HAVE_DASH_UNDEFINED_SYMBOLS
-- Performing Test HAVE_DASH_UNDEFINED_SYMBOLS - Success
-- Performing Test HAVE_DASH_DASH_NO_UNDEFINED
-- Performing Test HAVE_DASH_DASH_NO_UNDEFINED - Success
-- The following packages have been found:

 * Qt6BuildInternals
 * Qt6CoreTools (required version >= 6.1.3)
 * Qt6Core
 * Qt6Sql
 * Qt6 (required version >= 6.1.0)
 * MySQL, MySQL client library, <https://www.mysql.com>
 * ODBC

-- The following OPTIONAL packages have not been found:

 * DB2, IBM DB2 client library, <https://www.ibm.com>
 * PostgreSQL
 * Oracle, Oracle client library, <https://www.oracle.com>
 * SQLite3
 * Interbase, Interbase client library, <https://www.embarcadero.com/products/interbase>

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite ................................. yes
    Using system provided SQLite ......... no

-- Configuring done
-- Generating done
-- Build files have been written to: D:/Qt/6.1.3/mingw81_64/build-sqldrivers

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>cmake --build .
[7/22] Automatic MOC for target QODBCDriverPlugin
FAILED: odbc/QODBCDriverPlugin_autogen/timestamp odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp
cmd.exe /C "cd /D D:\Qt\6.1.3\mingw81_64\build-sqldrivers\odbc && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_autogen D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/CMakeFiles/QODBCDriverPlugin_autogen.dir/AutogenInfo.json RelWithDebInfo && D:\Qt\Tools\CMake_64\bin\cmake.exe -E touch D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_transform_depfile Ninja gccdepfile D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc D:/Qt/6.1.3/mingw81_64/build-sqldrivers D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/deps D:/Qt/6.1.3/mingw81_64/build-sqldrivers/CMakeFiles/d/5133c32f3c35421f7708f027879591e5919ed37a5e086c79c17338c197813494.d"

AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/main.cpp"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/main.moc"
included by
  "SRC:/odbc/main.cpp"

Command
-------
D:/Qt/6.1.3/mingw81_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN32_WINNT=0x0601 -D_WIN64 -ID:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.1.3/mingw81_64/include/QtCore -ID:/Qt/6.1.3/mingw81_64/include -ID:/Qt/6.1.3/mingw81_64/mkspecs/win32-g++ -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3/QtCore -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3/QtSql -ID:/Qt/6.1.3/mingw81_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/main.moc D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc/main.cpp

Output
------
:/Qt/6.1.3/mingw81_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"


AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/qsql_odbc_p.h"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp"
included by
  "SRC:/odbc/qsql_odbc.cpp"

Command
-------
D:/Qt/6.1.3/mingw81_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN32_WINNT=0x0601 -D_WIN64 -ID:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc -ID:/Qt/6.1.3/mingw81_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.1.3/mingw81_64/include/QtCore -ID:/Qt/6.1.3/mingw81_64/include -ID:/Qt/6.1.3/mingw81_64/mkspecs/win32-g++ -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtCore/6.1.3/QtCore -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3 -ID:/Qt/6.1.3/mingw81_64/include/QtSql/6.1.3/QtSql -ID:/Qt/6.1.3/mingw81_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.1.3/mingw81_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp D:/Qt/6.1.3/Src/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc_p.h

Output
------
:/Qt/6.1.3/mingw81_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"

[9/22] Automatic MOC for target QMYSQLDriverPlugin
ninja: build stopped: subcommand failed.

D:\Qt\6.1.3\mingw81_64\build-sqldrivers>
1

Mi się kończą pomysły ;)
Z tym problemem nie jesteś osamotniany link

Ja bym jeszcze sprawdził:
[1] czy masz wszystko aktualne MaintenanceTool.exe
[2] zrobil testy na najnowszej wersji 6.3

Ewentualnie mogę spakować pliki wynikowe skompilowane w 6.1.3 i Ci wysłać

0

@Adamek Adam: Sprawdziłem i wszystko aktualne. Pobieram wersje 6.3. Zaktualizuje wpis jak sprawdzę czy działa ;)

EDIT: Zainstalowałem 6.3 ze wszystkim co się dało. Utworzyłem nowy projekt i odpaliłem konsole. utworzyłem folder build-sqldrivers i postępowałem wg instrukcji oczywiście ze zmienionymi ścieżkami 6.1.3->6.3. Dodałem do PATH D:\Qt\6.3.0\mingw_64\bin i zrobiłem qt-cmake. Pojawił się identyczny błąd. Szczerze mówiąc byłem przekonany, że nowa wersja 6.3 rozwiąże problem, ale trochę się przeliczyłem :/

Setting up environment for Qt usage...

D:\Qt\6.1.3\mingw81_64>cd D:\Qt\6.3.0\mingw_64\build-sqldrivers

D:\Qt\6.3.0\mingw_64\build-sqldrivers>qt-cmake -G Ninja D:\Qt\6.3.0\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.3.0\mingw_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
-- The CXX compiler identification is GNU 8.1.0
-- The C compiler identification is GNU 8.1.0
-- The ASM compiler identification is GNU
-- Found assembler: D:/Qt/Tools/mingw810_64/bin/gcc.exe
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Qt/Tools/mingw810_64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Qt/Tools/mingw810_64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE

-- Configuring done
-- Generating done
-- Build files have been written to: D:/Qt/6.3.0/mingw_64/build-sqldrivers

D:\Qt\6.3.0\mingw_64\build-sqldrivers>cmake --build .
[1/22] Automatic MOC for target QODBCDriverPlugin
FAILED: odbc/QODBCDriverPlugin_autogen/timestamp odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/mocs_compilation.cpp
cmd.exe /C "cd /D D:\Qt\6.3.0\mingw_64\build-sqldrivers\odbc && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_autogen D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/CMakeFiles/QODBCDriverPlugin_autogen.dir/AutogenInfo.json RelWithDebInfo && D:\Qt\Tools\CMake_64\bin\cmake.exe -E touch D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/timestamp && D:\Qt\Tools\CMake_64\bin\cmake.exe -E cmake_transform_depfile Ninja gccdepfile D:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers D:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers/odbc D:/Qt/6.3.0/mingw_64/build-sqldrivers D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/deps D:/Qt/6.3.0/mingw_64/build-sqldrivers/CMakeFiles/d/1ae7861e732a123cf48dc112b50befe66be914b5f0f91228d9221bac36bbbe5c.d"

AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/main.cpp"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/main.moc"
included by
  "SRC:/odbc/main.cpp"

Command
-------
D:/Qt/6.3.0/mingw_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 -ID:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc -ID:/Qt/6.3.0/mingw_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.3.0/mingw_64/include/QtCore -ID:/Qt/6.3.0/mingw_64/include -ID:/Qt/6.3.0/mingw_64/mkspecs/win32-g++ -ID:/Qt/6.3.0/mingw_64/include/QtCore/6.3.0 -ID:/Qt/6.3.0/mingw_64/include/QtCore/6.3.0/QtCore -ID:/Qt/6.3.0/mingw_64/include/QtSql/6.3.0 -ID:/Qt/6.3.0/mingw_64/include/QtSql/6.3.0/QtSql -ID:/Qt/6.3.0/mingw_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/main.moc D:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers/odbc/main.cpp

Output
------
:/Qt/6.3.0/mingw_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"


AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/odbc/qsql_odbc_p.h"
into
  "BIN:/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp"
included by
  "SRC:/odbc/qsql_odbc.cpp"

Command
-------
D:/Qt/6.3.0/mingw_64/./bin/moc.exe -DMINGW_HAS_SECURE_API=1 -DQODBCDriverPlugin_EXPORTS -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_PLUGIN -DQT_SQL_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 -ID:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers/odbc -ID:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc -ID:/Qt/6.3.0/mingw_64/build-sqldrivers/include -ID:/MinGW/include -ID:/Qt/6.3.0/mingw_64/include/QtCore -ID:/Qt/6.3.0/mingw_64/include -ID:/Qt/6.3.0/mingw_64/mkspecs/win32-g++ -ID:/Qt/6.3.0/mingw_64/include/QtCore/6.3.0 -ID:/Qt/6.3.0/mingw_64/include/QtCore/6.3.0/QtCore -ID:/Qt/6.3.0/mingw_64/include/QtSql/6.3.0 -ID:/Qt/6.3.0/mingw_64/include/QtSql/6.3.0/QtSql -ID:/Qt/6.3.0/mingw_64/include/QtSql -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++ -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include -ID:/Qt/Tools/mingw810_64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed -ID:/Qt/Tools/mingw810_64/x86_64-w64-mingw32/include --include D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/moc_predefs.h --output-dep-file -o D:/Qt/6.3.0/mingw_64/build-sqldrivers/odbc/QODBCDriverPlugin_autogen/include/moc_qsql_odbc_p.cpp D:/Qt/6.3.0/Src/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc_p.h

Output
------
:/Qt/6.3.0/mingw_64/include/QtCore/qnamespace.:56:1: error: Parse error at "__attribute__"

[3/22] Automatic MOC for target QMYSQLDriverPlugin
ninja: build stopped: subcommand failed.

D:\Qt\6.3.0\mingw_64\build-sqldrivers>
1

rozumiem że wyklinujesz PATH a nie wpisujesz go do jakiegoś pliku .bat ?
jak w pliku .bat wyzerujesz PATH to dodajesz potem tylko takie foldery jakie potrzebujesz a dopiero potem cmake i ninja

widzę niespójność w tym co zacytowałeś z konsoli: dla 6.3QT widze "8.1.0" a powinien byc raczej "11.2.0" d:\Qt\Tools\mingw1120_64\bin\c++.exe

0

@Adamek Adam: Bardzo możliwe, że mam coś nie tak z PATH. Nie będę ukrywał że temat dodawania ścieżek do zmiennych środowiskowych ruszam może drugi raz w życiu.

Tak wygląda mój PATH w zmiennych środowiskowych:

screenshot-20220329223523.png

Powinienem coś tutaj pozmieniać? Bo tylko dodałem dwie ścieżki związane z wersją 6.3. Nie wiem, czy ma to jakiś wpływ ale wszystkie modyfikacje PATH robię w zmiennych użytkownika a nie systemowych. Czy jest to poprawne?

Poniżej wrzucam kod z konsoli dla MinGW 11.2.0:

Microsoft Windows [Version 10.0.19043.1586]
(c) Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\WINDOWS\system32> D:

D:\>D:\Qt\6.3.0\mingw_64\build-sqldrivers
'D:\Qt\6.3.0\mingw_64\build-sqldrivers' is not recognized as an internal or external command,
operable program or batch file.

D:\>cd D:\Qt\6.3.0\mingw_64\build-sqldrivers

D:\Qt\6.3.0\mingw_64\build-sqldrivers>qt-cmake -G Ninja D:\Qt\6.3.0\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.3.0\mingw_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
-- The CXX compiler identification is unknown
-- The C compiler identification is unknown
-- The ASM compiler identification is unknown
-- Found assembler: C:/Program Files (x86)/EGCS/bin/gcc.exe
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: C:/Program Files (x86)/EGCS/bin/c++.exe
-- Check for working CXX compiler: C:/Program Files (x86)/EGCS/bin/c++.exe - broken
CMake Error at D:/Qt/Tools/CMake_64/share/cmake-3.21/Modules/CMakeTestCXXCompiler.cmake:62 (message):
  The C++ compiler

    "C:/Program Files (x86)/EGCS/bin/c++.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: D:/Qt/6.3.0/mingw_64/build-sqldrivers/CMakeFiles/CMakeTmp

    Run Build Command(s):D:/Qt/Tools/Ninja/ninja.exe cmTC_26dad && [1/2] Building CXX object CMakeFiles\cmTC_26dad.dir\testCXXCompiler.cxx.obj
    FAILED: CMakeFiles/cmTC_26dad.dir/testCXXCompiler.cxx.obj
    C:\PROGRA~2\EGCS\bin\C__~1.EXE    -o CMakeFiles\cmTC_26dad.dir\testCXXCompiler.cxx.obj -c D:\Qt\6.3.0\mingw_64\build-sqldrivers\CMakeFiles\CMakeTmp\testCXXCompiler.cxx
    <command-line>:0:0: warning: "__cplusplus" redefined
    <built-in>: note: this is the location of the previous definition
    <command-line>:0:0: warning: "__STDC__" redefined
    <built-in>: note: this is the location of the previous definition
    <command-line>:0:0: warning: "__STDC__" redefined
    <command-line>:0:0: note: this is the location of the previous definition
    <command-line>:0:9: warning: "cpu" re-asserted
    <command-line>:0:13: warning: "machine" re-asserted
    C__~1.EXE: installation problem, cannot exec `cc1plus': No such file or directory
    ninja: build stopped: subcommand failed.





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:7 (project)


-- Configuring incomplete, errors occurred!
See also "D:/Qt/6.3.0/mingw_64/build-sqldrivers/CMakeFiles/CMakeOutput.log".
See also "D:/Qt/6.3.0/mingw_64/build-sqldrivers/CMakeFiles/CMakeError.log".

D:\Qt\6.3.0\mingw_64\build-sqldrivers>

Błędów jeszcze więcej niż było :/

1

na nadal podtrzymuje abyś napisał prosty skrypt BAT a nie klikał , bo coś wykaszleli i już masz inne błędy
chodzi o to aby tak sobie zorganizować prace aby nawet po 15 latach projekt dało się skompilować jednym palcem ;)
bez wyklękiwania i przypominana sobie jaki PATH był użyty podczas kompilacji

cd /d %~dp0
set PATH=d:\Qt\Tools\CMake_64\bin;d:\Qt\Tools\Ninja;d:\Qt\Tools\mingw1120_64\bin;d:\Qt\6.3.0\mingw_64\bin;c:\windows\system32
mkdir build001
cd build001
qt-cmake -G Ninja D:\Qt\6.3.0\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.3.0\mingw_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"

skopiuj,
wklej do pliku kompiluj.bat
i uruchom !

0

@Adamek Adam: Stworzyłem plik.bat, wkleiłem do niego to co podałeś, wrzuciłem go do D:\Qt\6.3.0\mingw_64 i uruchomiłem. Chyba przeszło, ale w Qt Creator nadal pojawia się błąd. Poniżej kod z konsoli:

Microsoft Windows [Version 10.0.19043.1586]
(c) Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\WINDOWS\system32> D:

D:\>cd D:\Qt\6.3.0\mingw_64

D:\Qt\6.3.0\mingw_64>plik.bat

D:\Qt\6.3.0\mingw_64>cd /d D:\Qt\6.3.0\mingw_64\

D:\Qt\6.3.0\mingw_64>set PATH=d:\Qt\Tools\CMake_64\bin;d:\Qt\Tools\Ninja;d:\Qt\Tools\mingw1120_64\bin;d:\Qt\6.3.0\mingw_64\bin;c:\windows\system32

D:\Qt\6.3.0\mingw_64>mkdir build001

D:\Qt\6.3.0\mingw_64>cd build001

D:\Qt\6.3.0\mingw_64\build001>qt-cmake -G Ninja D:\Qt\6.3.0\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=D:\Qt\6.3.0\mingw_64 -DMySQL_INCLUDE_DIR="D:\mysql-8.0.28-winx64\include" -DMySQL_LIBRARY="D:\mysql-8.0.28-winx64\lib\libmysql.dll"
-- The CXX compiler identification is GNU 11.2.0
-- The C compiler identification is GNU 11.2.0
-- The ASM compiler identification is GNU
-- Found assembler: D:/Qt/Tools/mingw1120_64/bin/gcc.exe
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Qt/Tools/mingw1120_64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Qt/Tools/mingw1120_64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE

-- Configuring done
-- Generating done
-- Build files have been written to: D:/Qt/6.3.0/mingw_64/build001

D:\Qt\6.3.0\mingw_64\build001>cmake --build .
[22/22] Linking CXX shared module plugins\sqldrivers\qsqlite.dll

D:\Qt\6.3.0\mingw_64\build001>cmake --install .
-- Install configuration: "RelWithDebInfo"
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfig.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfigVersion.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfigVersionImpl.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlmysql.dll
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets-relwithdebinfo.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlmysql.debug
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QMYSQLDriverPluginAdditionalTargetInfo.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginConfig.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginConfigVersion.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginConfigVersionImpl.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlodbc.dll
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets-relwithdebinfo.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlodbc.debug
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QODBCDriverPluginAdditionalTargetInfo.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfig.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfigVersion.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfigVersionImpl.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlite.dll
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets-relwithdebinfo.cmake
-- Installing: D:/Qt/6.3.0/mingw_64/./plugins/sqldrivers/qsqlite.debug
-- Installing: D:/Qt/6.3.0/mingw_64/lib/cmake/Qt6Sql/Qt6QSQLiteDriverPluginAdditionalTargetInfo.cmake

D:\Qt\6.3.0\mingw_64\build001>

Zrobiłem nowy projekt qmake i z MinGW 6.3.0 i nadal jest błąd:

22:30:33: Starting P:\Repositories\build-untitled4-Desktop_Qt_6_3_0_MinGW_64_bit-Release\release\untitled4.exe ...
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QODBC QPSQL
22:30:36: P:\Repositories\build-untitled4-Desktop_Qt_6_3_0_MinGW_64_bit-Release\release\untitled4.exe exited with code 0

Przy czym jest to projekt na qmake, a wersja cmake wyrzuca "QtSql: No such file or directory". Coś czytałem, że trzeba jakoś dodać sql do CMakeLists.txt. Tak czy inaczej z tego co zauważyłem udało się zainstalować, ale błędy w Qt Creatorze nadal mnie prześladują :)

2

Ja mam nadzieje ze przeanazowales co bylo źle i wyciagniesz wnioski ! (Wyklikiwanie PATH jest BE!)

QMYSQL driver not loaded

Gdzie jest aplikacja ?
A gdzie jest libmysql.dll ?

0

@Adamek Adam: Plik libmysql.dll wrzuciłem do folderu z plikiem .exe czyli w moim przypadku: P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release dla projektu cmake. Poniżej w skrócie opowiem co po kolei robię:

W UI dodałem przycisk oraz sygnał onclicked()

Później w pliku mainwindow.h dodałem:

#include <QtSql>
#include <QtSql/QSqlDatabase>
#include <QtSql/QtSql>
#include <QtSql/QSqlQuery>
#include <QMessageBox>

Natomiast w pliku mainwindow.cpp:

void MainWindow::on_pushButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("");
    db.setDatabaseName("atlas");

    if(db.open())
    {
        QMessageBox::information(this,"Connections","Database Connected");
    }
    else
    {
        QMessageBox::information(this,"Connections","Database NOT Connected");
    }
}

Na sam koniec wrzuciłem libmysql.dll do P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release

W pliku CMakeLists.txt dopisałem dwie linijki według tego poradnika: https://doc.qt.io/qt-6/qtsql-index.html tj:

find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(cmake_pr1 PRIVATE Qt6::Sql)

cmake_minimum_required(VERSION 3.5)

project(cmake_pr1 VERSION 0.1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS Sql)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(cmake_pr1
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET cmake_pr1 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(cmake_pr1 SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(cmake_pr1
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(cmake_pr1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(cmake_pr1 PRIVATE Qt6::Sql)

set_target_properties(cmake_pr1 PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(cmake_pr1)
endif()

Błąd nadal ten sam, więc pewnie popsułem coś w CMakeLists.txt.

16:39:34: Starting P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release\cmake_pr1.exe ...
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QODBC QPSQL
16:39:45: P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release\cmake_pr1.exe exited with code 0
1

umieść kompletny kod na github to z wrodzonej ciekawości zobaczę, bo co prawda w tej chwili nie potrzebuje w Qt SQL ale będzie na przyszłość ;)

Z samodzielnego dłubania to mogę polecić takie ścieżki i w miarę proste do ogarnięcia:

Na etapie budowania miałeś namieszane w PATH i sam cmake nie wiedział jak zbudować poprawnie teraz na etapie uruchamienia moze byc podobnie system operacyjny ma swoje zasady według których poszukuje bibliotek jak mu nie wymusisz to robi po swojemu

0

@Adamek Adam: Oto cały kod projektu: https://github.com/BushyAxis793/cmake_pr1

Odpalam Process Monitor. Dam znać co i jak.

EDIT: Jeśli chodzi o Process Monitor to dodałem sobie dwa filtry tak żeby znaleźć cmake_pr1.exe: dll oraz "NAME NOT FOUND". Uruchomiłem cmake_pr1.exe z folderu release. Niestety, trochę tego jest...Dodałem do repozytorium.

1

u mnie działa !
takie rozmieszczenie plików:

cmake_pr1.exe
libmysql.dll
sqldrivers\qsqlmysql.dll

obejrzałem sobie w "Process Monitor" co tam sie dzieje jak skasowałem np. libmysql.dll / qsqlmysql.dll
jednak GDB i Dependency Walker w takim przypadku nie pomogą wiec wykreśliłem z poprzedniego posty

0

@Adamek Adam: Nie jestem pewien czy dobrze interpretuje. Powinno być tak:

P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release\cmake_pr1.exe

P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release\libmysql.dll

qsqlmysql.dll kopiuje z D:\Qt\6.3.0\mingw_64\plugins\sqldrivers i wrzucam do

P:\Repositories\build-cmake_pr1-Desktop_Qt_6_3_0_MinGW_64_bit-Release\sqldrivers\qsqlmysql.dll

Przy takim rozmieszczeniu plików w Qt Creator klikam build, potem Run Cmake i na koniec Run. i pojawia się ten sam błąd.

1

na moje oko powinno działać !

W "process monitor" mozesz ustawic taki filtr:

"process name is cmake_pr1.exe include"
"path contains .dll include"
reszta ma byc NA CZERWONO (exclude)

Przed naciśnięciem przycisku robisz "clear" albo uruchamiasz "process monitor" (chodzi o to aby zbadac tylko to co sie dzieje po naciśnięciu )

A potem CTRL+F i szukasz qsqlmysql.dll libmysql.dll
zwróć uwage na katalog w ktorym sa pliki czy zgadza sie wersja QT

Jak masz miszmasz w PATH to mozesz ladowac nie ta wersje DLL
przeczytaj to https://doc.qt.io/qt-5/deployment-plugins.html

0

@Adamek Adam: Przepraszam, że długo nie odpowiadałem, ale postanowiłem wszystko od początku ustawić tj. Jeszcze raz zainstalować Cmake oraz utworzyć nowy projekt na cmake. Niestety nic to nie dało. Ustawiłem filtry które podałeś w Process Monitor i wszystko się zgadza tzn. qsqlmysql.dll oraz libmysql.dll znajdują się tam gdzie powinny. Biorąc pod uwagę jak długo walczę z tym podłączeniem MySql do Qt Creator chyba sobie odpuszczę. Zdecydowałem się na Qt Creator bo wcześniej robiłem prosty kalkulator do obliczania ceny i gęstości materiałów, a alternatywy w postaci CLR i WinAPI jakoś mnie odpychały. Jeszcze spróbuje usunąć całego Qt i raz jeszcze zainstalować, ale nie robię sobie nadziei, skoro do tej pory się nie udało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1