How to create the plugin of OCI for Qt



  • I would like to first say that I'm sorry.
    I am a person of South Korea.
    Does not speak English.
    Says using Google Translate.
    Explained in Qt- website.
    how to create oci plugin
    But I will not be created.
    The following errors occurred.

    C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference to OCIAttrGet' C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference toOCISessionEnd'
    C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference to OCIServerDetach' C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference toOCIHandleFree'
    C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference to OCIAttrSet' C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference toOCIErrorGet'
    C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: undefined reference to OCINumberFromInt' . . . . . C:\Qt\5.3\Src\qtbase\src\sql\drivers\oci\qsql_oci.cpp:-1: error: more undefined references toOCIAttrGet' follow
    :-1: error: .obj/release/qsql_oci.o: bad reloc address 0x1 in section `.text$_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7OCIStmtLb1EE6DeleteEPv[__ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7OCIStmtLb1EE6DeleteEPv]'
    collect2.exe:-1: error: error: ld returned 1 exit status

    I would appreciate someone to help us solve this problem.
    ㅠ_ㅠ


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Which version of Oracle did you install ?



  • Thank welcome. Nice.

    No, I did not install.
    So I've installed. oracle client 12g
    But another error has occurred.
    : -1: Error: can not find -loci
    collect2.exe: -1: error: error: ld returned 1 exit status

    can not find -loci
    Did not refer to the library.
    하지만 나는 참조했다.
    "LIBS + = library path"
    Library path = C: /app/client/yeongkyu/product/12.1.0/client_1/oci/lib/msvc/oci.lib
    I do not know why this result comes out.

    Thank you for your response.


  • Lifetime Qt Champion

    @C:/app/client/yeongkyu/product/12.1.0/client_1/oci/lib/msvc/@

    is the path you should use



  • Thank you for answers.
    But did not build.

    : -1: Error: can not find -loci
    : -1: Error: can not find C: /app/client/yeongkyu/product/12.1.0/client_1/oci/lib/msvc/: Permission denied
    collect2.exe: -1: error: error: ld returned 1 exit status

    I think I'm get cancer because of this problem
    I want a solution. sorry


  • Lifetime Qt Champion

    Did you saw that you have an additional space in the path that should not be there ?



  • Thank you for getting answers.
    Are you saying that say the amount of C?
    It is enough. 59 gigabytes
    If I ever wrong to say
    Use Google translator.
    Check your answer by using it.
    so sorry


  • Lifetime Qt Champion

    No, I mean the space char e.g.

    @C:/ << correct@

    and

    @C: / << wrong@



  • Thank you for getting answers.
    But I was using the correct expression.

    that the affected versions the Oracle client?
    Oracle also has a 64-bit Windows because the 64-bit installation.
    Does not seem like it.
    I installed the 32-bit Oracle.
    The same error occurs.
    I saw it out.

    you know what if the problem ?


  • Lifetime Qt Champion

    Can you post the pro file ?

    Which Qt package did you install ?



  • @TARGET = qsqloci

    SOURCES = main.cpp
    OTHER_FILES += oci.json
    include(../../../sql/drivers/oci/qsql_oci.pri)
    INCLUDEPATH += C:/app/yeongkyu/product/11.2.0/client_2/oci/include
    LIBS += C:/app/yeongkyu/product/11.2.0/client_2/oci/lib/msvc/oci.lib
    PLUGIN_CLASS_NAME = QOCIDriverPlugin
    include(../qsqldriverbase.pri)
    @

    I installed.

    qt 5.31 Prebuilt Components for Mingw 4.8.2 32-bit
    qt 5.3.1 Source componets
    tools>>mingw 4.8.2

    I have installed by selecting the three looks.
    How wrong I selected?
    I think that's enough.


  • Lifetime Qt Champion

    You can't expect to link a 64 bit to a 32bit Qt



  • Thank you for getting answers.

    That is because it is the 64-bit Windows?
    the mscv2013-64bit install and use it..?
    So do I need to install the ms's visual studio?
    Is it just that choose to install that in the package?

    I installed Visual Studio 2013 and mscv2013-64bit
    But it does not run.
    The following error appears.

    : -1: Error: LNK1181: 'oci.lib' can not open input file.

    TT_TT


  • Lifetime Qt Champion

    No, Windows 64 can run 32 bit applications. What you are doing is trying to link a 64 bit library to a 32 bit one, which is not possible.

    Are you sure you gave the correct path ?



  • I saw run everything.

    oracle client qt
    32bit 32bit
    64bit 32bit
    64bit 64bit
    32bit 64bit

    But that was not the case successfully.
    If possible run in 64bit 32bit
    Why 32bit - 32bit is running does not?
    Also, why does not run 64bit-64bit?
    Were given the right path.
    error is the "can not opened oci.lib"
    because lib file is found this error occurs
    I think so.

    I would not find a solution in this case.
    It is imperative for your help.
    please help me. sorry


  • Lifetime Qt Champion

    Please, ensure that you are using either both 32bit or 64bit version of the libraries (I mean Qt and Oracle) Next, check the compiler used to build Oracle's library and choose the one that matches with your Qt installation



  • Answer Thank you.
    So I checked.
    I installed qt mingw4.8.2 (32bit) and oracle client-win32 runtime (32bit).
    Is there something wrong here?
    Or do I need to add that same environment variables?
    : -1: Error: can not find -loci
    that can not find the oci libraries it?
    I do not know why would not find the library.


  • Lifetime Qt Champion

    Can you post the path where this lib can be found ? Not the one you are using but the explorer's path



  • C:\app\yeongkyu\product\11.2.0\client_2\oci\lib\msvc
    oci.lib is here.

    C:\app\yeongkyu\product\11.2.0\client_2\oci\include
    oci.h is here.

    C:\Qt\5.3\Src\qtbase\src\plugins\sqldrivers\oci
    oci.pro is here

    C:\app\yeongkyu\product\11.2.0\client_2\BIN
    dll file is here.

    I have not touched since the Oracle installation.
    just Path and have only set up the build.
    only the lib and include paths


  • Lifetime Qt Champion

    What else do you have in C:\app\yeongkyu\product\11.2.0\client_2\oci\lib\ ?



  • Answer Thank you.
    But it also does not work.
    So I tried the other way attempt.
    I copy mingw32 / bin the dll file in the oracle_home / client / bin.
    I copy mingw32 / include the all file in the oracle_home / client / oci / include.
    I copy mingw32 / lib lib file in the oracle_home / client / oci / lib / msvc.
    qt 5.3 for desktop (mingw4.8 32bit) .exe
    -> cd c: \ qt \ 5.3 \ src \ qtbase \ src \ plugins \ sqldrivers \ oci
    -> qmake oci.pro
    -> mingw32-make
    In this way I
    lbisqloci.a
    qsqloci.dll
    qsqlocid.dll
    I created three files.
    Success!
    But can not open the db.

    QOCIDriver: unable to create environment
    OCIHandleAlloc segmentation fault

    The source is as follows:
    @ QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QOCI8");
    db.setHostName("hostip");
    db.setDatabaseName("dbname");
    db.setUserName("userid");
    db.setPassword("userpw");
    db.setPort(1521);
    db.open();
    @
    Error is it because I had the wrong source code?
    Or so the plug incorrectly created?

    I would like to thank again
    the project be conducted .


  • Lifetime Qt Champion

    No, probably the wrong dll loading



  • Your answer is right.
    Plug was incorrectly made​​.
    I have succeeded in making the plug-in using the plug-in method of making oci provided by qt.

    But Oracle Tns error occurs.

    ORA-12154: the specified connection identifier cannot be analyzed
    Unable to logon

    This is a reference when creating a plugin
    This is specified when creating a plug-in to see qsql_oci.cpp

    @
    connectionString =
    QString::fromLatin1("(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=%1)(Port=%2))"
    "(CONNECT_DATA=(SERVICE_NAME=%3)))").arg(hostname).arg((port > -1 ? port : 1521)).arg(db)@

    Configure the TNS that the source of that I think.

    The TNS using sqlplus and I have successfully completed the database connection
    Is that different, and this part of the TNS version of DB?



  • I've solved.
    This is because you are helping.

    @connectionString =
    QString::fromLatin1("(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=%1)(PORT=%2)))"
    "(CONNECT_DATA=(SERVICE_NAME=%3)))").arg(hostname).arg((port > -1 ? port : 1521)).arg(db);@

    This was resolved by modifying the.
    Thanks .T_T


Log in to reply
 

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