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. Qt application crashing when using ODBC driver (macOS)
QtWS25 Last Chance

Qt application crashing when using ODBC driver (macOS)

Scheduled Pinned Locked Moved Unsolved General and Desktop
20 Posts 6 Posters 5.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.
  • S Offline
    S Offline
    SGaist
    Lifetime Qt Champion
    wrote on 18 Oct 2016, 20:15 last edited by
    #2

    Hi and welcome to devnet,

    What version of Qt are you using ? With which version of Xcode ?

    Also, what did you use to build the plugin ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • B Offline
      B Offline
      br4in
      wrote on 18 Oct 2016, 21:52 last edited by
      #3

      Hello ,

      I'm using Qt 5.7.0 with Xcode 8.0 (on macOS Sierra)
      By the way i used the same code on another mac running OS X Yosemite (with Xcode 7.0) and the same problem occurs.

      I used unixODBC to build the plugin , i followed this tutorial from qt website.

      Thank you in advance ^^

      1 Reply Last reply
      0
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 20 Oct 2016, 19:05 last edited by
        #4

        After a quick check, I'd recommend trying with iODBC.

        There seems to be a bug with unixODBC and unicode that results in stack corruption. If you have to use unixODBC, I can show you a patch for the Qt odbc driver to workaround that bug.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        2
        • B Offline
          B Offline
          br4in
          wrote on 21 Oct 2016, 15:29 last edited by
          #5

          Hello ,
          yes i would prefer a workaround for the bug
          because when i tried to rebuild with iODBC , i got :

          "PROJECT ERROR : cannot load qmodule.pri"

          Ty

          1 Reply Last reply
          0
          • S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 21 Oct 2016, 15:41 last edited by
            #6

            How are you trying to build the driver ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • B Offline
              B Offline
              br4in
              wrote on 21 Oct 2016, 15:42 last edited by
              #7

              EDIT : i have to resolve the qmodule.pri error , even if i will workaround the bug ,
              because i have to rebuild with unixODBC due to an reinstallation of QT

              1 Reply Last reply
              0
              • S Offline
                S Offline
                SGaist
                Lifetime Qt Champion
                wrote on 21 Oct 2016, 15:43 last edited by
                #8

                Again, how are you trying to build the driver and what exact error are you having ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  br4in
                  wrote on 21 Oct 2016, 15:54 last edited by
                  #9

                  Here's how i did :

                  I launch a terminal , and i type
                  cd ~/Qt/5.7/Src/qtbase/src/plugins/sqldrivers/odbc

                  then i type
                  qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" //Here's where the problem appears

                  then i run a simple "make"

                  it worked to first time , but when i tried to build the iODBC driver , it gives me the error. i that's why i reinstalled the whole Qt (but doesn't resolved a thing)

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on 21 Oct 2016, 16:00 last edited by
                    #10

                    what do you get if you call which qmake ?

                    To be sure to use the right one, you should use the full path to the binary.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      br4in
                      wrote on 21 Oct 2016, 16:52 last edited by
                      #11

                      Thank you so much ,
                      it turns out that my terminal is using another qmake , it worked when i used the full path.

                      so i builded the iODBC driver with this command line :
                      /Users/br4in/Qt5.6.2/5.6/clang_64/bin/qmake "INCLUDEPATH+=/usr/local/iODBC/include" "LIBS+=-L/usr/local/iODBC/lib -liodbc"

                      it gave no errors , but the app is still crashing when i use the ODBC driver.

                      it seems like an issue with QODBC , can you give me the tutorial to workaround the bug ?

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on 21 Oct 2016, 22:51 last edited by
                        #12

                        Just apply the patch you can find here and rebuild the driver.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        1
                        • B Offline
                          B Offline
                          br4in
                          wrote on 22 Oct 2016, 23:23 last edited by
                          #13

                          I applied the patch , rebuilded the driver and my code.
                          but the issue isn't fixed yet :(

                          1 Reply Last reply
                          0
                          • hskoglundH Offline
                            hskoglundH Offline
                            hskoglund
                            wrote on 22 Oct 2016, 23:55 last edited by hskoglund
                            #14

                            Hi, it might be something with Oracle's .dylib for ODBC, which .dylib/client do you use?

                            Qt's libqsqlodbc.dylib works fine for me, but I use it for MS SQLServer together with FreeTDS (libtdsodbc.so). Also in my Qt 5.7 libqsqlodbc.dylib was included so I didn't had to build it myself.

                            Edit: looked at the crash screen above, it indeed seems that the crash is where @SGaist 's patch should help. You could try to patch again, but this time just comment out the whole function, something like this:

                            static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode = 0)
                            {
                                return "";
                            }
                            

                            That function just returns an additional diagnostic error message, so it's not really needed :-)

                            1 Reply Last reply
                            0
                            • B Offline
                              B Offline
                              br4in
                              wrote on 23 Oct 2016, 10:27 last edited by
                              #15

                              Hey , I commented the whole function as you said , except the two above lines :
                              QString result;
                              return result; (because if i type return " " , i will get a constructor error)
                              then i rebuilded the driver and started a new project with the same code.

                              the problem wasn't resolved . Maybe my libqsqlodbc.dylib is executing a different qsql_odbc.cpp file ?

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on 23 Oct 2016, 15:35 last edited by
                                #16

                                Did you install the driver ?

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on 23 Jan 2017, 23:55 last edited by
                                  #17

                                  Can you check again with 5.8 ?

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0
                                  • M Offline
                                    M Offline
                                    Mohammad Kanan
                                    wrote on 3 Aug 2017, 19:23 last edited by Mohammad Kanan 8 Sept 2017, 19:44
                                    #18

                                    Steps to activate/test QODBC on Mac OS ((Seirra) towards MSSQL or any other ODBC DB:

                                    Symptom 1: Qt Creator Run (Debug): application crashes (program unexpectedly finished/crashed).
                                    Symptom 2: Qt Creator with pre-built Qt packages (Qt installed with MaintenanceTool).

                                    Symptom 3: freeTDS driver (libtdsodbc.so) is missing after installing freeTDS packages.

                                    Symptom 4: Qt built/configured before installing unixODBC.

                                    1. Download and install unixODBC (must be done before installing freeTDS)
                                      Go -- > (www.unixODBC.org) / (Drivers) / (unixODBC-2.3.4.tar.gz)
                                      unzip and untar the packages.
                                      (Make sure you have write permissions otherwise run below last command with sudo prefix)
                                    ./configure --prefix=/usr/local/unixODBC
                                    make
                                    sudo make istall
                                    
                                    1. Download and install freeTDS:
                                      Go --> (http://www.freetds.org/) / ( Quick Links) / (Latest Versions) / (Stable Release)
                                      untar/unzip the package.
                                    ./configure --prefix=/usr/local/freeTDS --with-unixodbc=/usr/local/unixODBC/
                                    make
                                    sudo make install
                                    

                                    Note:
                                    --with-unixodbc will cause the driver (libtdsodbc.so) to be installed.

                                    1. Unfortunately, possibly the ODBC plugin on Qt should be rebuilt:

                                    Note: If you are using the prebuilt Qt libraries, you will need to download sources using MaintenanceTool ($QTDIR/MaintenanceTool.app)

                                    • Tell qmake where to find the unixODBC header files and shared libraries (here it is assumed that unixODBC is installed in /usr/local/unixODBC) and run make:
                                    cd $QTDIR/qtbase/src/plugins/sqldrivers/odbc
                                    

                                    my case:

                                    cd /usr/local/Qt/5.9.1/Src/qtbase/src/plugins/sqldrivers/odbc
                                    
                                    qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
                                    make
                                    

                                    if that goes correctly: you will get complied QODBC new libs:

                                    cd ../plugins/sqldrivers/
                                    

                                    copy the new packages for example to :

                                    /usr/local/Qt/5.9.1/clang_64/plugins/sqldrivers/
                                    
                                    1. Configure /etc/local/unixODBC/etc/odbc.ini (you might need root permissions to mdify)
                                      (No need to configure freeTDS):

                                    (which port ? which version -> Run /usr/local/freeTDS/bin/tsql -LH 192.168.x.x
                                    Create/Modify entry in /usr/local/unixODBC/etc/odbc.ini

                                    [MYDSN]
                                    
                                    Driver = /usr/local/freeTDS/lib/libtdsodbc.0.so
                                    
                                    Server = 192.168.x.x
                                    
                                    Port = 51271
                                    
                                    1. In Qt project:
                                    QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");
                                    
                                    mydb.setDatabaseName("MYDSN")
                                    
                                    mydb.setUserName("name on Database");
                                    
                                    mydb.setPassword(" password on Database");
                                    mydb.open()
                                    

                                    (Luck && !alas) = true.

                                    1 Reply Last reply
                                    2
                                    • J Offline
                                      J Offline
                                      julrich
                                      wrote on 3 May 2019, 12:05 last edited by
                                      #19

                                      To make the plugin link against unixodbc, I had to replace -liodbc with -lodbc in the configure.json file in the sqldrivers directory before following the instructions in the documentation (done with Qt 5.12.3).

                                      So the complete steps for me were:

                                      $ brew install unixodbc
                                      $ cd path/to/Qt/5.12.3/Src/qtbase/src/plugins/sqldrivers
                                      $ sed -i -e 's/-liodbc/-lodbc/' configure.json
                                      $ qmake -- ODBC_PREFIX=/usr/local/Cellar/unixodbc/2.3.7
                                      $ make sub-odbc
                                      $ cp plugins/sqldrivers/libqsqlodbc* path/to/Qt/5.12.3/plugins/sqldrivers
                                      
                                      O 1 Reply Last reply 4 May 2019, 15:04
                                      5
                                      • J julrich
                                        3 May 2019, 12:05

                                        To make the plugin link against unixodbc, I had to replace -liodbc with -lodbc in the configure.json file in the sqldrivers directory before following the instructions in the documentation (done with Qt 5.12.3).

                                        So the complete steps for me were:

                                        $ brew install unixodbc
                                        $ cd path/to/Qt/5.12.3/Src/qtbase/src/plugins/sqldrivers
                                        $ sed -i -e 's/-liodbc/-lodbc/' configure.json
                                        $ qmake -- ODBC_PREFIX=/usr/local/Cellar/unixodbc/2.3.7
                                        $ make sub-odbc
                                        $ cp plugins/sqldrivers/libqsqlodbc* path/to/Qt/5.12.3/plugins/sqldrivers
                                        
                                        O Offline
                                        O Offline
                                        oxycoder
                                        wrote on 4 May 2019, 15:04 last edited by
                                        #20

                                        @julrich I have to login and thank you.
                                        It works.

                                        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