IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[OCILIB] installation et utilisation OCILIB


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Par défaut [OCILIB] installation et utilisation OCILIB
    Bonjour, j'ai tenter de suivre le tutoriel sur OCILIB réalisé par Vincent Rogier.

    J' ai quelques soucis (vous devez vous en douter, sinon je ne posterai pas ici).

    Je travaille :
    - sous windows XP
    - avec la dernière version d'eclipse cdt
    - mon compilateur est cygwin
    - la version OCILIB est 3.3.0

    Mon but est de faire une simple requête SQL sur une database oracle (10g).

    Mon arborescence est :

    - ws (workspace eclipse)
    - - test (projet c++ eclipse)
    - - - dll (répertoire avec ociliba.dll)
    - - - lib (répertoire avec ociliba.lib)
    - - - src (contenant test.cpp et ocilib.h)

    pour :

    - ociliba.lib : project > properties > C/C++ Build > Settings > Cygwin C++ linker > Library search path (-L) = ${workspace_loc:/test/lib}

    - ociliba.dll : j'édite mon PATH windows : C:\...\ws\test\dll\ociliba.dll;

    - test.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <iostream>
    using namespace std;
    #include "ocilib.h"
     
    int main()
    {
        if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;
     
        /* ... application code here ... */
     
        OCI_Cleanup();
     
     
        return EXIT_SUCCESS;
    }
    -----------------------------------------------------------------------

    Pour le préprocesseur et la modifiaction de OCI_API=__sdtcall je vais dans :
    project > properties > C/C++ Build > Settings > Cygwin C++ > Preprocessor : seulement je n'obtient que des erreurs quand j'essaye de mettre OCI_API=__sdtcall.

    1
    ------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    **** Build of configuration Debug for project test ****
     
    make all 
    Building file: ../src/test.cpp
    Invoking: Cygwin C++ Compiler
    g++ -E -DOCI_API=__sdtcall -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o"src/test.o" "../src/test.cpp"
    Finished building: ../src/test.cpp
     
    Building target: test.exe
    Invoking: Cygwin C++ Linker
    g++ -L"C:\0 - home\ws\test\lib" -o"test.exe"  ./src/test.o   
    ./src/test.o: file not recognized: File format not recognized
    collect2: ld returned 1 exit status
    make: *** [test.exe] Error 1
    ----------------------------------------------------------------------
    2 - quand j'enlève le -E j'obtiens un nombre impressionnant d'erreurs.
    3 - quand je ne mets rien dans le préprocessor j'obtients :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    **** Build of configuration Debug for project test ****
     
    make all 
    Building file: ../src/test.cpp
    Invoking: Cygwin C++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o"src/test.o" "../src/test.cpp"
    Finished building: ../src/test.cpp
     
    Building target: test.exe
    Invoking: Cygwin C++ Linker
    g++ -L"C:\0 - home\ws\test\lib" -o"test.exe"  ./src/test.o   
    ./src/test.o: In function `main':
    /cygdrive/c/0 - home/ws/test/Debug/../src/test.cpp:15: undefined reference to `_OCI_Initialize'
    /cygdrive/c/0 - home/ws/test/Debug/../src/test.cpp:20: undefined reference to `_OCI_Cleanup'
    collect2: ld returned 1 exit status
    make: *** [test.exe] Error 1
    ------------------------------------------------------------------------

    Je sais qu'il manque certaines informations. Car je ne suis pas un grand spécialiste du C++ (je suis plutôt java ...). Mais pouvez vous m'aider. Car je ne savais pas qu'il était si difficile de faire une requête en C/C++, par rapport à java.

    Je vous remercie d'avance pour vos futures réponses.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Par défaut
    Bonjour, me revoilà, je n'ai plus d'erreurs de compilation, cependant j'ai une erreur d'exécution lors de l'appel :


    =========================================================
    code :
    -------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include "ocilib.h"
     
    void err_handler(OCI_Error *err)
    {
        printf(
                    "code  : ORA-%05i\n"
                    "msg   : %s\n"
                    "sql   : %s\n",
                    OCI_ErrorGetOCICode(err),
                    OCI_ErrorGetString(err),
                    OCI_GetSql(OCI_ErrorGetStatement(err))
               );
    }
     
    int main(void)
    {
        OCI_Connection *cn;
        if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;
     
        cn = OCI_ConnectionCreate("wrong_db", "wrong_usr", "wrong_pwd",
                                  OCI_SESSION_DEFAULT);
     
     
        OCI_Cleanup();
     
     
        return EXIT_SUCCESS;
    }
    =========================================================
    compilation :
    -------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    **** Build of configuration Debug for project ocilib_test ****
     
    make all 
    Building file: ../src/ocilib_test.cpp
    Invoking: Cygwin C++ Compiler
    g++ -DOCI_API=__stdcall -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ocilib_test.d" -MT"src/ocilib_test.d" -o"src/ocilib_test.o" "../src/ocilib_test.cpp"
    Finished building: ../src/ocilib_test.cpp
     
    Building target: ocilib_test.exe
    Invoking: Cygwin C++ Linker
    g++  -o"ocilib_test.exe"  ./src/ocilib_test.o   -locilib
    Finished building target: ocilib_test.exe
    =========================================================
    console execution :
    -------------------------------------------------------------------------
    code : ORA-00000
    msg : Cannot create OCI environment
    sql : (null)
    =========================================================
    Pouvez vous m'aider ?

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    le message " Cannot create OCI environment" signifie que la shared lib d'oracle est bien chargée mais que la variable ORACLE_HOME n'est pas définie...

    Donc, définis une variable d'environnement ORACLE_HOME qui pointe sur le répertoire d'oracle
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Par défaut
    Après un petit re-démarrage, l'erreur précédente a été réglée.
    (eh oui, des fois a force de vouloir corriger un problème on en oubli les règles de base)

    Je te remercie, grandement !

    Problème résolu !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Par défaut
    Voilà, maintenant que je faisais marcher cette belle lib avec eclipse et cygwin, je suis passé a visual c++ (v6.0 : un peu ancienne, mais je n'avais que ca sous la main!)

    cependant le problème que je rencontre est le suivant :

    - lors de la compilation de mon projet il me sort deux erreurs dans le fichier ocilib.h
    ------------------------------------------------------------------------
    c:\program files\microsoft visual studio\vc98\include\ocilib.h(1639) : error C2146: syntax error : missing ';' before identifier 'OCI_Initialize'
    c:\program files\microsoft visual studio\vc98\include\ocilib.h(1639) : fatal error C1004: unexpected end of file found
    ------------------------------------------------------------------------

    Je souhaiterai savoir comment enlever ces erreurs ...
    Vincent si tu me lis ...

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    salut,

    as tu défini OCI_API sur __stdcall (sans faute de frappe ) ?
    as tu inclus windows.h avant ou apres ocilib.h ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OCILIB] Installation et configuration
    Par emmye dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 06/02/2012, 17h12
  2. [OCILIB] Instalation pour connexion Oracle
    Par alex6644 dans le forum Interfaces de programmation
    Réponses: 5
    Dernier message: 05/07/2011, 19h45
  3. [OCILIB] Installation et configuration environement
    Par newdevelopper dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 03/01/2009, 01h17
  4. [OCILIB] Utiliser OCILIB sous Borland C++ 5.02 anglais
    Par jack554 dans le forum Interfaces de programmation
    Réponses: 9
    Dernier message: 29/10/2008, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo