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

Oracle Discussion :

Error loading external library


Sujet :

Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut Error loading external library
    Bonjour,

    Config : Oracle 9i, Windows 2000.

    J'ai créé une dll C (lib1.dll) qui elle-même utilise une dll (lib2.dll). Ces 2 dll sont dans un répertoire C:\Lib
    J'ai créé une libraire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE LIBRARY MA_LIB AS 'C:\Lib\lib1.dll'
    J'ai créé ma procédure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      FUNCTION LibEntryPoint(id IN PLS_INTEGER) RETURN PLS_INTEGER
      AS LANGUAGE C
    	 NAME "libEntryPoint"
    	 LIBRARY "MA_LIB"
    	 WITH CONTEXT
    	 PARAMETERS(CONTEXT, id INT);
    Mais qu'en j'essai d'exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE 
    	err NUMBER;
    BEGIN 
    	err := LibEntryPoint(1);
    END;
    J'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ORA-06520: PL/SQL: Error loading external library
    ORA-06522: Unable to load DLL
    Le listener.ora est configuré:
    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
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = nufas4)(PORT = 1521))
          )
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
          )
        )
      )
     
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (ENVS="EXTPROC_DLLS=ANY")
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\Programs\ora92)
          (PROGRAM = extproc)
        )
      )
    et le tnsname.ora contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    EXTPROC_CONNECTION_DATA=
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
        (CONNECT_DATA = (SID = PLSExtProc))
      )
    J'ai également essayé d'ajouter le répertoire où se trouvent les 2 dll dans la variable d'environnement "path" mais ça ne change rien.
    Par contre, si je modifie la dll "lib1" pour qu'elle n'utilise plus la dll "lib2" ça fonctionne...

    Quelqu'un peut-il m'aider ?
    Merci

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    je ne comprends absolument rien mais voila une réponse d'Oracle :

    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
    Solution Description
     
    ====================
     
    Make sure that the EPS (Express PL/SQL SNAPI) components are installed
     
    in the Oracle8i home and that the library search path points to the
     
    directory where those components are installed.
     
    Explanation
     
    ===========
     
    On Windows NT, the following files should be installed in the \bin
     
    subdirectory of the Oracle8i home:
     
    -- eps.dll
     
    -- eps.ini
     
    -- epsus.msb
     
    On UNIX, the following files should be installed in the /lib
     
    subdirectory of the Oracle8i home:
     
    -- eps.so
     
    -- eps.ini
     
    -- epsus.msb
     
    The library search path environment variable should include the
     
    directory where the EPS components are located. For example, on
     
    Windows NT, the appropriate environment variable is PATH, and on
     
    Solaris it is LD_LIBRARY_PATH.
    Apparemment tu devrais mettre le nom du fichier et pas la librairie en prenant garde qu'elle est bien dans le répertoire de la variable LD_LIBRARY_PATH... bon courage

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FUNCTION LibEntryPoint(id IN PLS_INTEGER) RETURN PLS_INTEGER 
    as external
       LANGUAGE C 
       NAME "libEntryPoint" 
       LIBRARY MA_LIB
       WITH CONTEXT 
       PARAMETERS(CONTEXT, id INT);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut
    plaineR : dans la doc Oracle, il est écrit qu'il est recommandé d'utiliser la syntaxe AS LANGUAGE C plutôt que AS EXTERNAL :o

    orafrance : je ne comprends rien non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Apparemment tu devrais mettre le nom du fichier et pas la librairie en prenant garde qu'elle est bien dans le répertoire de la variable LD_LIBRARY_PATH
    LD_LIBRARY_PATH c'est sous Unix, non ? Pour Windows c'est plutôt PATH.
    Où est-ce que je dois mettre le nom de quel fichier ?

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ha non non, ça doit aussi être sous windows mais là c'est peut-être une clé de registre

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 21
    Par défaut
    Ca y est, j'ai la solution
    Il fallait préciser dans le listener.ora les différents chemins de toutes les DLL utilisées par la dll lib1.dll (excepté system32 et ORACLE_HOME\bin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SID_LIST_LISTENER = 
      (SID_LIST = 
        (SID_DESC = 
          (ENVS="EXTPROC_DLLS=ANY,PATH=C:\lib:C:\dev") 
          (SID_NAME = PLSExtProc) 
          (ORACLE_HOME = C:\Programs\ora92) 
          (PROGRAM = extproc) 
        ) 
      )
    Merci de votre aide

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

Discussions similaires

  1. Error Loading Library
    Par Axel95 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 24/08/2007, 13h27
  2. Error when loading shared libraries
    Par mbelaoucha dans le forum Linux
    Réponses: 4
    Dernier message: 20/06/2007, 18h02
  3. Réponses: 9
    Dernier message: 08/03/2007, 14h26
  4. [installation 9i] error while loading shared library
    Par ChristopheH dans le forum Installation
    Réponses: 3
    Dernier message: 19/07/2006, 17h36
  5. Réponses: 2
    Dernier message: 05/02/2004, 13h58

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