Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Fun and games (?!) building QSQLITE for Qt 5.15.0

Fun and games (?!) building QSQLITE for Qt 5.15.0

Scheduled Pinned Locked Moved Unsolved General and Desktop
18 Posts 5 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AMGAMG
    wrote on last edited by
    #8

    @Christian Ehrlicher. Apologies for slow response, the forum will only let me post once every 10 minutes.

    I'm building QSQLite by my own because I need encryption. I believe I need to rebuild to use the SQLite Encryption Extension Please tell me I'm wrong.

    JonBJ 1 Reply Last reply
    0
    • A AMGAMG

      @Christian Ehrlicher. Apologies for slow response, the forum will only let me post once every 10 minutes.

      I'm building QSQLite by my own because I need encryption. I believe I need to rebuild to use the SQLite Encryption Extension Please tell me I'm wrong.

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #9

      @AMGAMG
      I cannot guide you about what you need to do for your requirements.

      But the error line we are interested in is indeed:

      QLibraryPrivate::loadPlugin failed on "C:/Qt/5.15.0/mingw81_32/plugins/sqldrivers/qsqlite.dll" : "Cannot load library C:\Qt\5.15.0\mingw81_32\plugins\sqldrivers\qsqlite.dll: Unknown error 0x000000c1."

      You should indeed try a Dependency Walker as @Christian-Ehrlicher says. I think you have something wrong in your build! For 0x000000c1, is there any chance you have the wrong architecture, as per https://stackoverflow.com/questions/61080829/cannot-load-library-dll-unknown-error-0x000000c1 ? Or plain dependencies missing, like https://stackoverflow.com/questions/64915865/qmlplugindump-error-when-building-with-mingw-64bits-qt-5-13-1 ? Seems Qt plugin loading likes to throw this error code :)

      1 Reply Last reply
      0
      • A Offline
        A Offline
        AMGAMG
        wrote on last edited by
        #10

        @AMGAMG said in Fun and games (?!) building QSQLITE for Qt 5.15.0:

        mingw32-make sub-sqlite

        Thanks @JonB. I'll check out those two StackOverflow links.

        1 Reply Last reply
        0
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #11

          @AMGAMG said in Fun and games (?!) building QSQLITE for Qt 5.15.0:

          configure -prefix C:\Qt\5.15.0\Src\qtbase -nomake tests -nomake examples -sql-sqlite -opensource -confirm-license

          This is not needed and therefore wrong

          cd qtbase\src\plugins\sqldrivers
          \Qt\5.15.9\mingw81_32\bin\qmake "INCLUDEPATH+=\Qt\5.15.0\Tools\OpenSSL\Win_x86\include" "LIBS+=-L%\Qt\5.15.0\Tools\OpenSSL\Win_x86\lib -l:libssl.lib -l:libcrypto.lib"

          L% and -l: doesn't look right. Also are you sure you're using a 32bit binary build of Qt?

          Please follow the documentation.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          A 1 Reply Last reply
          0
          • Christian EhrlicherC Christian Ehrlicher

            @AMGAMG said in Fun and games (?!) building QSQLITE for Qt 5.15.0:

            configure -prefix C:\Qt\5.15.0\Src\qtbase -nomake tests -nomake examples -sql-sqlite -opensource -confirm-license

            This is not needed and therefore wrong

            cd qtbase\src\plugins\sqldrivers
            \Qt\5.15.9\mingw81_32\bin\qmake "INCLUDEPATH+=\Qt\5.15.0\Tools\OpenSSL\Win_x86\include" "LIBS+=-L%\Qt\5.15.0\Tools\OpenSSL\Win_x86\lib -l:libssl.lib -l:libcrypto.lib"

            L% and -l: doesn't look right. Also are you sure you're using a 32bit binary build of Qt?

            Please follow the documentation.

            A Offline
            A Offline
            AMGAMG
            wrote on last edited by AMGAMG
            #12

            @Christian-Ehrlicher OK, thanks. I didn't realise I already had a .pro file in Qt\5.15.0\Src\qtbase\src\plugins\sqldrivers.

            My make line is wrong, I'm running a batch file with environment variables in and trying to translate on-the-fly as I post here. The second argument to qmake is actually "LIBS+=-L\Qt\5.15.0\Tools\OpenSSL\Win_x86\lib -l:libssl.lib -l:libcrypto.lib". I understand that -l:libssl.lib links against libssl.lib, whereas -lssl would attempt to link against libssl.a. This is advice given by a colleague, I assumed that since the dll built without errors, it was good advice; if you'd like me to try something else, please tell me. If you could say how I can "make clean" as well, so I don't need to wait 45 minutes while I remove and re-download the sources, I would be very grateful.

            I'm not sure what build of Qt I'm using, to be honest, but I am sure it's a 32-bit kit. As well as reading and writing SQLite databases, the application has to read MS Access database written with a 32-bit version and when we tried building with a 64-bit kit, we couldn't read them.

            I'm on the point of trying again, making sure that \Qt\5.15.0\Tools.OpenSSL\Win_x86\lib is in PATH at run-time. I will use the sqldrivers.pro that came with the source distribution.

            It's getting late in the UK so I won't be able to post results until the morning because of the "only one post every 10 minutes" thing.

            (Later - also some edits above about the use of -l:)

            Adding the directory to PATH didn't fix the problem.

            I now have this piece of code, which demonstrates the problem:

                    const QString dllName ("C:/Qt/5.15.0/mingw81_32/plugins/sqldrivers/qsqlite.dll");
                    QLibrary lib (dllName);
                    const bool loaded (lib.load ());
                    if (loaded)
                    {
                        qDebug ().noquote () << QString ("%1 loaded OK").arg (dllName);
                    }
                    else
                    {
                        qDebug ().noquote () << QString ("%1 failed to load - '%2'").arg (dllName).arg (lib.errorString ());
                    }
            

            I also understand why you are suspicious that I'm not building a 32-bit dll. After reading this answer on superuser.com, I've run file against my driver:

            $ file /cygdrive/c/Qt/5.15.0/mingw81_32/plugins/sqldrivers/qsqlite.dll
            /cygdrive/c/Qt/5.15.0/mingw81_32/plugins/sqldrivers/qsqlite.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
            

            I've never run the utility before, but that looks to me like a 32-bit image.

            1 Reply Last reply
            0
            • A Offline
              A Offline
              AMGAMG
              wrote on last edited by
              #13

              I believe I have solved this now and have been able to build a encryption-aware SQLite driver on Qt 5.15.0. My head is still spinning from relief so I am uncertain, but this is what I believe I did to build a version using the SQLite Encryption Extension and OpenSSL (I will recheck and repeat, and post back here if I find that I actually did something different):

              • Download sqlite3-see-aes256-openssl.c and sqlite3.h from the SQLite website - note that this requires a licence from SQLite.org, and use them to overwrite sqlite3.c and sqlite3.h in the Qt sources tree (C:\Qt\5.15.0\Src\qtbase\src\3rdparty\sqlite on my machine.
              • Move to the database drivers source directory (C:\Qt\5.15.0\Src\qtbase\src\plugins\sqldrivers on my machine)
              • Run qmake, spcifying some extra dependencies:
              qmake "INCLUDEPATH+=C:\Qt\Tools\OpenSSL\Win_x86\include" "LIBS+=-LC:\Qt\Tools\OpenSSL\Win_x86\lib -l:libssl.lib -l:libcrypto.lib"
              
              • Run make to build the database driver.
              mingw32-make sub-sqlite
              
              • Copy the new driver from the source tree to kit (on my machine, from C:\Qt\5.15.0\Src\qtbase\src\plugins\sqldriver\plugins\sqldriver to C:\Qt\5.15.0\mingw81_32\plugins\sqldrivers)
              • Ensure that the OpenSSL crypto library is on the PATH when you run the application (on my machine, I need to add C:\Qt\Tools\OpenSS:\Win_x86\bin)

              Many thanks to everyone, particularly @Christian-Ehrlicher, @jsulm and @JonB for their help.

              I believe that the Qt Documentation could be improved in this area and will probably raise a bug report to that effect.

              My process currently only builds qsqlite.dll which I assume is a Release version. I was hoping also to get a Debug version, probably called qsqlited.dll, but since what I have works with a Debug build of my software, and I have absolutely no desire to debug the driver I will leave it here.

              1 Reply Last reply
              0
              • Christian EhrlicherC Offline
                Christian EhrlicherC Offline
                Christian Ehrlicher
                Lifetime Qt Champion
                wrote on last edited by
                #14

                @AMGAMG said in Fun and games (?!) building QSQLITE for Qt 5.15.0:

                I believe that the Qt Documentation could be improved in this area and will probably raise a bug report to that effect.

                In which way? The steps you did are exactly the same as documented: https://doc.qt.io/qt-5/sql-driver.html#compile-only-a-specific-sql-driver

                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                Visit the Qt Academy at https://academy.qt.io/catalog

                A 1 Reply Last reply
                0
                • Christian EhrlicherC Christian Ehrlicher

                  @AMGAMG said in Fun and games (?!) building QSQLITE for Qt 5.15.0:

                  I believe that the Qt Documentation could be improved in this area and will probably raise a bug report to that effect.

                  In which way? The steps you did are exactly the same as documented: https://doc.qt.io/qt-5/sql-driver.html#compile-only-a-specific-sql-driver

                  A Offline
                  A Offline
                  AMGAMG
                  wrote on last edited by
                  #15

                  @Christian-Ehrlicher

                  To judge by the number of threads on these forums, and elsewhere on the internet, dealing with queries on how to build a Qt database driver something is wrong.

                  The documentation section "Building the dirvers" starts with a discussion of the output of configure. I agree that there is no instruction to run configure, but neither is there any specific instruction not to build the driver. A week has passed now, but so far as I recall it was only when you stated above, in response to my publishing the command that I was using, that "This is not needed and therefore wrong", that it even occurred to me not to run configure.

                  I'm still having trouble - I am currently trying to circulate instructions on how to build the driver around the project team, and I find that I am unable to rebuild the driver from a cygwin window, or from a MinGW window started by selecting "Git-bash here" from the windows explorer context menu. I am able to build it from the Windows command prompt. I suspect this is nothing whatever to do with Qt, and am NOT asking for any assistance to resolve this problem here.

                  I'm sorry not to have answered your question about documentation before now. If you can advise me how to set up my Qt Forum account so that I am emailed when someone else contributes to a thread I have contributed to (or even only one that I've started) I would be very grateful.

                  Back to my suspicion that the Qt Documentation could be improved... I notice that you have responded to a large proportion of the threads about building database drivers. Why do you think there are so many?

                  Thnks again for pointing me in the right direction.

                  1 Reply Last reply
                  0
                  • Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #16

                    I personally don't understand why anyone will create a sqldatabase driver plugin by them self when there are basic c++ and compiling knowledge is missing. Why not simply use the drivers by Qt instead? Why all people want to use a open-source unfriendly database like MySQL at all?

                    And if you think you can improve the documentation - feel free to provide a patch.

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    A SprezzaturaS 2 Replies Last reply
                    0
                    • Christian EhrlicherC Christian Ehrlicher

                      I personally don't understand why anyone will create a sqldatabase driver plugin by them self when there are basic c++ and compiling knowledge is missing. Why not simply use the drivers by Qt instead? Why all people want to use a open-source unfriendly database like MySQL at all?

                      And if you think you can improve the documentation - feel free to provide a patch.

                      A Offline
                      A Offline
                      AMGAMG
                      wrote on last edited by
                      #17

                      @Christian-Ehrlicher: I tried to explain some days ago.

                      • I am not using MySQL. I am using SQLite.
                      • The application I am building requires an encrypted database. The SQLite driver that is bundled with Qt does not support encryption; at least, it is not documented to support it.
                      • SQLite.org do provide an encryption extension, which is available on payment of an additional licence fee.
                      • On payment of the fee, you are supplied with "drop-in" replacements for the public domain sqlite3.c and sqlite3.h. You must then recompile your software using those sources.

                      I have the greatest respect for your knowledge of Qt as well as your patience. I would appreciate it if you would extend me a similar courtesy.

                      1 Reply Last reply
                      2
                      • Christian EhrlicherC Christian Ehrlicher

                        I personally don't understand why anyone will create a sqldatabase driver plugin by them self when there are basic c++ and compiling knowledge is missing. Why not simply use the drivers by Qt instead? Why all people want to use a open-source unfriendly database like MySQL at all?

                        And if you think you can improve the documentation - feel free to provide a patch.

                        SprezzaturaS Offline
                        SprezzaturaS Offline
                        Sprezzatura
                        wrote on last edited by
                        #18

                        @Christian-Ehrlicher AMGAMG clearly answered your question on 15 Dec: ENCRYPTION. He's building the encrypted version of SQLite, which is only available as source code, and you have to compile it yourself. The built-in Qt version does not handle SQLite encryption.

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved