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

C Discussion :

problème libraire partagé .so


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut problème libraire partagé .so
    Bonjour,
    j'essaie d'exécuter un script cgi écrit en C sur un serveur de reconnaissance vocale, mais j'ai cette erreur::

    /var/www/cgi-bin/transfertFichier.cgi: error while loading shared libraries: libSWIrec.so.3: cannot open shared object file: No such file or directory

    cette libraire existe bien dans le disc mais je ne sais pas ou il faut la placer exactement pour que le script fonctionne correctement!

    est ce que vous avez une ideé?
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    Bonjour,

    Ce n'est pas un problème de language C mais bon.

    Il faut que ta librairie soit dans un des répertoires de la variable d’environnement LD_LIBRARY_PATH de l'utilisateur sous lequel tourne ton serveur web.
    Donc, soit tu lui ajoute le répertoire contenant ta lib, soit tu déplace ta lib dans un de ses répertoires.

    Tu peux également éditer le fichier ld.so.conf et lancer ldconfig pour reconstruire le cache des librairies, il me semble.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    merci c'est super claire

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    une petite précision, il faut ajouté la chemin ou se trouve notre .so à la variable, ou il faut ajouter les dossier /etc/httpd/lib à la variable ?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 474
    Par défaut
    Citation Envoyé par virus321 Voir le message
    une petite précision, il faut ajouté la chemin ou se trouve notre .so à la variable, ou il faut ajouter les dossier /etc/httpd/lib à la variable ?
    Le chemin où se trouve ton *.so.

    Par contre, si ton script est exécuté par le serveur web et pas directement par toi, alors il faudra t'assurer que le serveur en question — lui — affecte correctement cette variable. Et, pour cela, il existe des directives dédiées.

    Par ailleurs, si c'est sous Linux que tu travailles, il existe le fichier /etc/ld.so.conf et le répertoire ld.so.conf.d qui servent à spécifier les emplacements de toutes les bibliothèques et générer un cache.

    D'une manière générale, si ta bibliothèque est faite pour être installée durablement sur le système, il vaut mieux la mettre dans un des répertoires dédiés à cela plutôt que surcharger LD_LIBRARY_PATH. Par contre, si elle ne sert qu'à ton script, il vaut mieux la mettre à l'écart, effectivement.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    effectivement c'est le serveur apache qui exécute le script et pas root,
    donc à ce que je comprends, je dois ajouter le chemin /usr/local/Nuance/Recognizer/lib(l'endroit où se trouve mon .so) dans le fichier ld.so.conf?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    j'ai trouvé ça en cherchant sur le net:

    L’édition des liens avec une bibliothèque partagée est dynamique et se fait au moment de l’exécution
    du programme par le système à l’aide de la bibliothèque ld.so. Le binaire fournit le nom des
    bibliothèques à lier à l’exécution, mais pas le chemin. Les fonctions de ld.so déterminent en fonction
    de son nom la bibliothèque à utiliser parmi les chemins qu’elles connaissent.
    Tout programme est lié à la bibliothèque ld.so ou plutôt ld-linux.so (ld-linux.so.2).
    Le chargeur de liens ld.so recherche les bibliothèques dans plusieurs endroits dont, et dans cet ordre :
     les chemins précisés dans la variable d’environnement LD_LIBRARY_PATH. Les chemins
    sont séparés, comme pour PATH, par des ":" ;
     le contenu du fichier /etc/ld.so.cache qui contient une liste compilée (format binaire) des
    bibliothèques trouvées dans les chemins prédéfinis ;
     les répertoires /lib et /usr/lib.
    La recherche dans /lib et /usr/lib est implicite. De même, le fait de remplir la variable
    LD_LIBRARY_PATH n’empêche en rien la recherche des bibliothèques aux autres endroits si elle n’est
    pas dans un des chemins de la liste.
    Pour éviter la mise en place d’une variable dont le contenu peut être difficile à manipuler, ld.so
    propose un cache que vous pouvez modifier vous-même. Le cache est construit depuis le contenu
    du fichier /etc/ld.so.conf et de la commande ldconfig

    J'ai essayé d'ajouté le chemin à la variable LD_LIBRARY_PATH, je me retrouve avec le même problème , j'ai modifié le ld.so.conf aussi mais sans résultat. J'ai toujours le même problème: apache n'arrive pas à charger la libraire partagé !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    - Pour modifier la variable LD_LIBRARY_PATH, tu t'es loggé sous l'utilisateur apache ? Tu as modifié le bashrc pour que ta modification soit persistante ?

    - En tant que root, tu as édité le fichier /etc/ld.so.conf et relancé la commande ldconfig ?

    On sait jamais, essai de relancer ton serveur apache, et vérifie les droits d'acces d'apache à ta librairie .so ?
    Sinon j'ai pas d'autre idées, à moins qu'il y ai une configuration spécifique à apache.

Discussions similaires

  1. Problème de partage de connexion
    Par oops! dans le forum Administration
    Réponses: 5
    Dernier message: 09/08/2006, 14h52
  2. Problème de partage
    Par jyms2006 dans le forum Administration
    Réponses: 1
    Dernier message: 29/03/2006, 16h15
  3. Problème de partage de connection Internet
    Par Bradarys dans le forum Administration
    Réponses: 2
    Dernier message: 19/01/2006, 19h25
  4. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  5. probléme de partage de connection entre winxp et win2000
    Par unix27 dans le forum Administration
    Réponses: 1
    Dernier message: 29/07/2005, 20h02

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