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] Erreur OCI_Initialize : Cannot load OCI shared library (oci.dll)


Sujet :

Interfaces de programmation Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [OCILIB] Erreur OCI_Initialize : Cannot load OCI shared library (oci.dll)
    Bonjour à tous,

    Je démarre tout juste avec l'API.
    Après quelques maladresses, j'arrive enfin à compiler et exécuter un programme (Merci Vincent...).

    Maintenant, j'utilise la toute première instruction OCI_Initialize.

    Pour celà, je teste le code suivant sur un poste Windows 7 dans Visual Studio C++, projet MFC avec utilisation des MFC en statique (ça peut éventuellement être important) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int res_oci_ini;
    res_oci_ini=OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
    if(res_oci_ini!=TRUE)
    {
    	OCI_Error *err = OCI_GetLastError();
    	CString logecran;
    	logecran.Format("Erreur Oracle : OCI_Initialize. errcode=%d errmsg=%s", OCI_ErrorGetOCICode(err),  OCI_ErrorGetString(err));
    	MessageBox(logecran);
    }
    Et si je poste ce message, c'est que j'obtiens à l'écran l'erreur :
    "Erreur Oracle : OCI_Initialize. errcode=0 errmsg=Cannot load OCI shared library (oci.dll)"

    Je me dis que le programme ne trouve peut-être pas la DLL de mon Oracle.
    J'ai installé Oracle 11g (client+serveur) dans le répertoire :
    D:\ORACLE

    J'ai regardé la définition de OCI_Initialize.
    Et d'après ce que j'ai lu, le deuxième argument, optionnel, peut être un path où aller chercher :
    * Soit on ne précise pas le path et Windows 'sait' où aller chercher
    * Soit on ne précise pas le path, et si Windows ne sait pas où chercher, ce sera dans son PATH
    * Soit on précise un path où aller chercher

    J'ai donc testé plusieurs choses :
    * de copier les fichiers oci*.dll de mon BIN Oracle dans C:\WINDOWS (c'est là où j'ai d'ailleurs copié ociliba.dll)
    * d'appeler la fonction OCI_Initialize avec l'un des deux paramétrages suivants, successivement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    resociini=OCI_Initialize(NULL, "D:\\Oracle\\product\\11.2.0\\dbhome_1\\BIN", OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
    resociini=OCI_Initialize(NULL, "D:\\Oracle", OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
    J'ai toujours exactement le même message d'erreur.
    Quelqu'un voit-il ce qui peut se passer et proposer quelque chose ?

    Question subsidiaire qui est peut être naïve : le message d'erreur indique que 'oci.dll' ne peut se charger. S'il s'agit bien de oci.dll de mon client Oracle, comment le programme sait-il son nom alors qu'il n'arrive pas à la charger?

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Le nom de la DLL a charger est déterminé à la compilation en étant déduit de la plateforme (ou peut être fourni sous Unices par le configure).

    Si OCILIB ne peut charger sous la librairie partagée (sous windows, "oci.dll"), deux raison possible :

    - La dll n'existe pas aux endroit ou elle peut être chargé (path fourni à OCI_Initialize() ou paths systemes)
    - L'application utilisant OCILIB est en 32bits et le client Oracle en 64bits ou vice versa...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Salut Vincent,
    Je me doutais vaguement que cette fois encore, il pourrait s'agir d'une histoire de 32/64 bits.
    Déjà la première fois, tu m'as mis sur la bonne voie : bien que mon système soit en 64 bits, tu m'as appris que Visual Studio génère par défaut du 32 bits (ce qui m'a permis de mettre les bons fichier oci de ton API).
    Et en effet, j'ai installé la version x64 de Oracle 11g.
    Je suis donc actuellement en 32bits pour le programme et 64 pour Oracle.

    J'ai donc le choix entre :
    * Générer du code 64 bits (+mettre les bons fichiers de l'API)
    * Installer un Oracle 32 bits.

    Quelques minutes m'ont suffit pour générer une version 64 bits de mon projet Visual C++.
    Tu avais une fois de plus vu juste : mon projet compile et la fonction OCI_Initialize passe sans erreur.
    La suite devrait être un jeu d'enfant je pense.

    C'est la solution que je préfère : le programme c'est moi qui le maîtrise alors que le client Oracle, je n'aurai pas toujours le choix.

    Encore un sujet qui sera marqué "résolu" en deux temps trois mouvements.
    Je ne peux encore une fois que te remercier chaudement.
    Philippe

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

Discussions similaires

  1. Forcer le chemin des DLL (Failed to load a shared library)
    Par K007024 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 04/06/2015, 18h50
  2. DLL : crash or failed to load a shared library
    Par K007024 dans le forum wxWidgets
    Réponses: 1
    Dernier message: 04/06/2015, 16h02
  3. Erreur de chargement : Cannot load OCI shared library (oci.dll)
    Par yacsnipe dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 04/09/2013, 12h59
  4. [WS 2003] Erreur : windows cannot load the user's profile
    Par mysystm dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 16/07/2012, 14h35
  5. Réponses: 2
    Dernier message: 05/02/2004, 14h58

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