Windows 10 Oracle driver compile problem



  • Hi.
    I'm working on an application for my theses using qt and oracle database and I'm having trouble compiling the oci driver if anyone can help it would be greatly appreciated( I was also using How to build Oracle driver - Windows with MinGW-ERROR as a guide).
    The are the following things I've installed on a Windows 10 x64:

    • oracle database 11g release 2

    • qt (qt 5.8 and 5.9)

    • vs 2013.

    I've modified the oci.pro file according to How to run project OCI (changed QMAKE_USE += oci to QMAKE_LFLAGS += oci.lib).
    Everything works without any problems until I have to run the nmake command or mingw32-make command.
    The is what I typed in the console (I would like to mention i ran Qt 5.8 for Desktop (MSVC 2013 32 bit) for msvc and ...(MinGW 5.3.0 32 bit) for mingw):

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC (vcvarsall.bat - needed for msvc to recognize nmake)
    set INCLUDE=%INCLUDE%;C:\oracle\product\11.2.0\client_1\oci\include
    set LIB=%LIB%;C:\oracle\product\11.2.0\client_1\oci\lib\msvc
    cd D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci
    qmake oci.pro
    nmake or mingw32-make
    
    

    This is everything i typed in the console (trying to compile the driver with mingw):

    Setting up environment for Qt usage...
    
    D:\Programs\Installed\Qt\5.8\mingw53_32>set INCLUDE=%INCLUDE%;C:\oracle\product\11.2.0\client_1\oci\include
    
    D:\Programs\Installed\Qt\5.8\mingw53_32>set LIB=%LIB%;C:\oracle\product\11.2.0\client_1\oci\lib\msvc
    
    D:\Programs\Installed\Qt\5.8\mingw53_32>cd D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>qmake oci.pro
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>mingw32-make
    mingw32-make -f Makefile.Release all
    mingw32-make[1]: Entering directory 'D:/Programs/Installed/Qt/5.8/Src/qtbase/src/plugins/sqldrivers/oci'
    g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++1z -fno-exceptions -frtti -Wall -Wextra -Wvla -Wdate-time -DUNICODE -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. -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtSql\5.8.0 -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtSql\5.8.0\QtSql -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtCore\5.8.0 -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtCore\5.8.0\QtCore -ID:\Programs\Installed\Qt\5.8\mingw53_32\include -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtSql -ID:\Programs\Installed\Qt\5.8\mingw53_32\include\QtCore -I.moc\release -IC:\utils\my_sql\my_sql\include -IC:\utils\postgresql\pgsql\include -IC:\openssl\include -I..\..\..\..\mkspecs\win32-g++  -o .obj\release\qsql_oci.o qsql_oci.cpp
    qsql_oci.cpp:65:17: fatal error: oci.h: No such file or directory
    compilation terminated.
    Makefile.Release:350: recipe for target '.obj/release/qsql_oci.o' failed
    mingw32-make[1]: *** [.obj/release/qsql_oci.o] Error 1
    mingw32-make[1]: Leaving directory 'D:/Programs/Installed/Qt/5.8/Src/qtbase/src/plugins/sqldrivers/oci'
    Makefile:38: recipe for target 'release-all' failed
    mingw32-make: *** [release-all] Error 2
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>
    

    If anyone can help me with this it would be greatly appreciated and thank you in advance.


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    You can't mix and match compilers like that. Which version of Qt are you building for ? What compiler was used to build your OCI libraries ?



  • @SGaist
    Thank you for the rely(I'm a beginner at this, please bear with me).

    I want to use msvc ( tried mingw but after some research i found that qt doesn't support it under windows).
    The version i'm building for is 5.8 (from what i noticed 5.9 is 64 bit only for vs 2013).
    For building i used Qt 5.8 32-bit for Desktop (MSVC 2013) with vcvarsall.bat.
    If i launch it from the vs console it doesn't recognize qmake.

    This is everything i did in the console.

    Setting up environment for Qt usage...
    Remember to call vcvarsall.bat to complete environment setup!
    
    D:\Programs\Installed\Qt\5.8\msvc2013>c:
    
    C:\Windows\System32>cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
    
    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC>vcvarsall.bat
    
    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC>d:
    
    D:\Programs\Installed\Qt\5.8\msvc2013>set INCLUDE=%INCLUDE%;C:\oracle\product\11.2.0\client_1\oci\include
    
    D:\Programs\Installed\Qt\5.8\msvc2013>set LIB=%LIB%;C:\oracle\product\11.2.0\client_1\oci\lib\msvc
    
    D:\Programs\Installed\Qt\5.8\msvc2013>cd D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>qmake oci.pro
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>nmake
    
    Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
            "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.exe" -f Makefile.Release all
    
    Microsoft (R) Program Maintenance Utility Version 12.00.21005.1
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
            D:\Programs\Installed\Qt\5.8\msvc2013\bin\moc.exe -DUNICODE -DWIN32 -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DNDEBUG -D_WINDLL --compiler-flavor=msvc --include .moc/release/moc_predefs.h -ID:/Programs/Installed/Qt/5.8/Src/qtbase/mkspecs/win32-msvc2013 -ID:/Programs/Installed/Qt/5.8/Src/qtbase/src/plugins/sqldrivers/oci -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtSql/5.8.0 -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtSql/5.8.0/QtSql -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtCore/5.8.0 -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtCore/5.8.0/QtCore -ID:/Programs/Installed/Qt/5.8/msvc2013/include -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtSql -ID:/Programs/Installed/Qt/5.8/msvc2013/include/QtCore -I%INCLUDE% -IC:\oracle\product\11.2.0\client_1\oci\include main.cpp -o .moc\release\main.moc
    moc: Too many input files specified: 'Files' '(x86)\Microsoft' 'Visual' 'Studio' '12.0\VC\INCLUDE;C:\Program' 'Files' '(x86)\Microsoft' 'Visual' 'Studio' '12.0\VC\ATLMFC\INCLUDE;C:\Program' 'Files' '(x86)\Windows' 'Kits\8.1\include\shared;C:\Program' 'Files' '(x86)\Windows' 'Kits\8.1\include\um;C:\Program' 'Files' '(x86)\Windows' 'Kits\8.1\include\winrt;;C:\oracle\product\11.2.0\client_1\oci\include' 'main.cpp'
    Usage: D:\Programs\Installed\Qt\5.8\msvc2013\bin\moc.exe [options] [header-file] [@option-file]
    Qt Meta Object Compiler version 67 (Qt 5.8.0)
    
    Options:
      -?, -h, --help              Displays this help.
      -v, --version               Displays version information.
      -o <file>                   Write output to file rather than stdout.
      -I <dir>                    Add dir to the include path for header files.
      -F <framework>              Add Mac framework to the include path for header
                                  files.
      -E                          Preprocess only; do not generate meta object
                                  code.
      -D <macro[=def]>            Define macro, with optional definition.
      -U <macro>                  Undefine macro.
      -M <key=value>              Add key/value pair to plugin meta data
      --compiler-flavor <flavor>  Set the compiler flavor: either "msvc" or "unix".
      -i                          Do not generate an #include statement.
      -p <path>                   Path prefix for included file.
      -f <file>                   Force #include <file> (overwrite default).
      -b <file>                   Prepend #include <file> (preserve default
                                  include).
      --include <file>            Parse <file> as an #include before the main
                                  source(s).
      -n <which>                  Do not display notes (-nn) or warnings (-nw).
                                  Compatibility option.
      --no-notes                  Do not display notes.
      --no-warnings               Do not display warnings (implies --no-notes).
      --ignore-option-clashes     Ignore all options that conflict with compilers,
                                  like -pthread conflicting with moc's -p option.
    
    Arguments:
      [header-file]               Header file to read from, otherwise stdin.
      [@option-file]              Read additional options from option-file.
    NMAKE : fatal error U1077: 'D:\Programs\Installed\Qt\5.8\msvc2013\bin\moc.exe' : return code '0x1'
    Stop.
    NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.exe"' : return code '0x2'
    Stop.
    
    D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci>
    

    I don't understand why the help command gets "activated", is moc or nmake confused or something?


  • Lifetime Qt Champion

    The Qt project has provided pre-built packages for MinGW for years.

    Then again, the same question: what compiler was used to build the Oracle libraries ?



  • @SGaist

    None(i mean i didn't build them). I installed them(i got the win32_11gR2_client.zip). The only time i tried to compile anything was when i tried to do it for the oci driver and i use msvc from Qt 5.8 32-bit for Desktop (MSVC 2013) console with vcvarsall.bat to recognize nmake command (the vs console doesn't recognize qmake and i don't know how to make it to do it).


  • Moderators

    @darius93 "the vs console doesn't recognize qmake" - you can just use absolute path to qmake.exe
    What @SGaist is telling you is: you have to use exact same compiler for both the library and your app. With same I mean even same version. That means: if the Oracle library was build with, let's say, MSVC2015 then you cannot use it with MSVC2013. You need to find out which compiler was used to build Oracle library.



  • I've solved the problem (thank you to everyone who replied it helped a lot).
    This is everything i did:

    • installed oracle instant client 11g
    • installed qt (5.8)
    • removed vs 2013 if you installed it (the driver can't be build with 2013, same thing applies to mingw under windows)
    • installed vs 2015
    • installed windows sdk (just the debugger).

    After this i modified the oci.pro (changed QMAKE_USE += oci to QMAKE_LFLAGS += oci.lib) - the location of the file is (in my case) D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci.
    Then i run Qt 5.8 32-bit for Desktop (MSVC 2015) and i run in it vcvarsall.bat (the location of the file is where you installed vs in my case C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC).

    set INCLUDE=%INCLUDE%;C:\oracle\product\11.2.0\client_1\oci\include //location of oracle include file oci.h
    set LIB=%LIB%;C:\oracle\product\11.2.0\client_1\oci\lib\msvc  // location of lib files
    cd D:\Programs\Installed\Qt\5.8\Src\qtbase\src\plugins\sqldrivers\oci  // location of my oci.pro file
    qmake oci.pro
    nmake
    

    After everything compiled you should find a plugins folder in qt version/src/qtbase (my case - D:\Programs\Installed\Qt\5.8\Src\qtbase). Copy the dlls and the debugger where you compiler is located(the one you used to compile the driver) and you are done.

    Happy programming.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.