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 sous AIX 5.3


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
    Mai 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 44
    Par défaut OCILIB sous AIX 5.3
    Bonjour,

    Je dois utiliser la librairie ocilib dans un environnement AIX 5.3 sur ORACLE 10.2

    voici le code test :
    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
     
    #include "ocilib.h"
     
     
    int main(int argc, char* argv[])
    {  
        /* ------------------------ INITIALIZE OCI -------------------------- */
     
        if (!OCI_Initialize("", "", OCI_ENV_DEFAULT))
        {
            printf("KO");
            return EXIT_FAILURE;
        }
        else
            printf("OK");
        OCI_Cleanup();
        return EXIT_SUCCESS;
    }
    voici ma commande compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -I$HOME/include -DOCI_IMPORT_LINKAGE -DOCILIB_CHARSET_ANSI -L/appli/oracle/product/10.2.0/lib -lclntsh  -L$HOME/lib -locilib -g test.cpp -o main
    J'obtiens un core dump, et le gdb affiche ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    (gdb) backtrace
    #0  0xd2a7a774 in OCIEnvCreate ()
       from $HOME/lib/libocilib.a(libocilib.so.3)
    #1  0xd2a7a2dc in OCI_Initialize (err_handler=0, home=0x2 "", mode=0)
        at library.c:792
    #2  0x10000394 in main (argc=1, argv=0x2ff22aa0) at test.cpp:8
    (gdb) up
    #1  0xd2a7a2dc in OCI_Initialize (err_handler=0, home=0x2 "", mode=0)
        at library.c:792
    792     library.c: A file or directory in the path name does not exist..
            in library.c
    Current language:  auto; currently c
    Voici la ligne dans le fichier library.c correspondant à cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      +792          res = res && (OCI_SUCCESS == OCIEnvCreate(&OCILib.env, oci_mode,
      +793                                                    (dvoid *) NULL, NULL, NULL, NULL,
      +794                                                    (size_t) 0, (dvoid **) NULL));
    Pouvez-vous m'aider?
    Est-ce un problème de compilation et d'installation de la librairie OCILIB?

    Merci,

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    A mon avis, passer une chaine vide sur le premier paramètre ne lui plait pas du tout. Je suis meme étonné que ton compilateur arrive à compiler, je viens de tester il me fait un énorme warning.

    Normalement tu doit lui passer un pointeur sur une fonction de callback utilisée lorsqu'une erreur est rencontrée.

    Passe lui NULL si tu ne veux pas récupérer la gestion de erreurs, ou créé une fonction qui par exemple affiche le number d'erreur et le message.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 44
    Par défaut
    J'ai modifié avec ceci :

    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
     
    #include "ocilib.h"
     
     
    int main(int argc, char* argv[])
    {  
        /* ------------------------ INITIALIZE OCI -------------------------- */
     
        IF (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        {
            printf("KO");
            RETURN EXIT_FAILURE;
        }
        else
            printf("OK");
        OCI_Cleanup();
        RETURN EXIT_SUCCESS;
    }

    même résultat...

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    Tu peux afficher l'erreur qui est affichée par gdb ? (segmentation fault, access violation , etc...)


    Tu as bien mis les chemin vers les libs dans ton LD_LIBRARY_PATH ?

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 44
    Par défaut
    voilà ce que dit gdb :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    Breakpoint 1 at 0x10000384: file test.cpp, line 8.
    (gdb) run
    Starting program: /main
    s
    Breakpoint 1, main (argc=1, argv=0x2ff22ab0) at test.cpp:8
    8           if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
    (gdb) step
    OCI_Initialize (err_handler=0, home=0x0, mode=0) at library.c:294
    warning: Source file is more recent than executable.
     
    294         if (OCILib.ver_compile > 0)
    Current language:  auto; currently c
    (gdb)
    297         memset(&OCILib, 0, sizeof(OCI_Library));
    (gdb)
    787             if (mode & OCI_ENV_THREADED)
    (gdb)
    310         OCILib.use_lob_ub8 = TRUE;
    (gdb)
    299         OCILib.error_handler  = err_handler;
    (gdb)
    302         OCILib.env_mode       = mode;
    (gdb)
    300         OCILib.ver_compile    = OCI_VERSION_COMPILE;
    (gdb)
    316         OCILib.use_scrollable_cursors = TRUE;
    (gdb)
    310         OCILib.use_lob_ub8 = TRUE;
    (gdb)
    787             if (mode & OCI_ENV_THREADED)
    (gdb)
    301         OCILib.ver_runtime    = OCI_VERSION_RUNTIME;
    (gdb)
    300         OCILib.ver_compile    = OCI_VERSION_COMPILE;
    (gdb)
    792             res = res && (OCI_SUCCESS == OCIEnvCreate(&OCILib.env, oci_mode, (dvoid *) NULL, NULL, NULL, NULL, (size_t) 0, (dvoid **) NULL));
    (gdb)
     
    Program received signal SIGSEGV, Segmentation fault.
    0xd2a7a774 in OCIEnvCreate () from $HOME/lib/libocilib.a(libocilib.so.3)
    L'erreur proviendrait de libocilib.a?

  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
    Bonjour,

    ce n'est un problème de compilation en lui même...

    Postes le log du configure de l'install de OCILIB
    Postes te contenu de tes variables LD_LIBRARY_PATH, ORACLE_HOME

    Ta machine est une 32 bits ou une 64 bits ?
    ton ORACLe_HOME possède t il un \lib ? un \lib32 ? un \lib64 ?

    le segfault est provoqué par l'appel à OCIEnvCreate() qui est la première fonction OCI appelée. Donc quelque chose fouarre avec cet appel. Ce ne sont pas les paramètres (un pointeur et un int et que des null) mais l'appel de fonction lui même... Soucis de 32/64bits ?

    Postes donc les infos demandée, stp..

    Dans tout les cas, a ta place, je désintallerai ocilib puis referai une install propre pour voir...
    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] Problème d'execution sous AIX
    Par farid Guennif dans le forum Interfaces de programmation
    Réponses: 12
    Dernier message: 13/03/2009, 12h21
  2. Affectation de ressource pour Oracle sous Aix
    Par schumi101 dans le forum Administration système
    Réponses: 9
    Dernier message: 15/06/2006, 10h32
  3. rerouter la sortie standard sous AIX
    Par HRS dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2006, 14h23
  4. Probleme de compilation Postgresql sous Aix 4.3.3
    Par bustaf dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/12/2005, 12h04
  5. Librairies dynamique sous AIX en C++ : MaLib.so
    Par didierM dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 23/10/2003, 18h19

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