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 a l'execution: error while loading shared libraries


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut Problème a l'execution: error while loading shared libraries
    Hello,
    Voila je veux utiliser GSL, je l'ai installé manuellement et ca a trés bien fonctionné.
    Maintenant je veux faire un petit test, j'ia compilé mon programme à l'aide de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gcc -Wall -I/home/vince/gsl-1.9/include -D OS_LINUX  -c src/main.c -o obj/main.o
    gcc -L/home/vince/gsl-1.9/lib -lm -lgsl -lgslcblas  obj/main.o -o bin/test
    Pas de pb, mais quand j'execute le programme j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./bin/test: error while loading shared libraries: libgsl.so.0: cannot open shared object file: No such file or directory
    Ce qui me parait bizard étant doné que je lui ai donné lors de l'édition des liens le chemin vers les librairies a utiliser, et que la dite librairie s'y trouve bien...

    Voila si quelqu'un a une idée pour résoudre cette histoire...
    Merci d'avance

  2. #2
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    $ man ldconfig
    Vérifier les libs référencées par le chargeur:
    # ldconfig -p
    Si libgsl.so.0 n'est pas dans la liste (evidemment qu'il n'y est pas, pour l' instant),
    # ldconfig
    # ln -s /usr/local/lib/libgsl.so.0 /usr/local/lib/libgsl.so
    Evidemment je dis /usr/local/lib mais toi tu sais.

  3. #3
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Sous Linux il te faut 2 liens pour utiliser une librairie partagée :

    Le Linker name utilisé par le linker
    Le soname utilisé a l'execution

    Donc si tu n'as que le linker name, le linker peut faire son job, mais tu ne peux pas executer ton programme

    Exemple :
    Librairie mylib.so.2.0 (créé par le linker)
    Soname : mylib.so.2 (créé par la commande /sbin/ldconfig)
    Linker name : mylib.so (créé par la commande ln -sf)

    Plus d'infos : http://tldp.org/HOWTO/Program-Library-HOWTO/ (lien en anglais)

    EDIT : Grillé XD

  4. #4
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Premièrement, la commande ldconfig ne fonctionne pas ds ma console... (je suis sous fédora).
    J'ai été voir ds le dossier /sbin/ ms j'ai rien vu de ce nom.

    Ensuite, dans le répertoire que j'ai désigné au linker, uil y a les fichiers suivants (correspondant a la librairie qui m'interesse) avec ls -l:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -rw-r--r-- 1 vince vince 7706254 Mar  7 17:16 libgsl.a
    -rwxr-xr-x 1 vince vince     806 Mar  7 17:16 libgsl.la
    lrwxrwxrwx 1 vince vince      16 Mar  7 17:16 libgsl.so -> libgsl.so.0.10.0
    lrwxrwxrwx 1 vince vince      16 Mar  7 17:16 libgsl.so.0 -> libgsl.so.0.10.0
    -rwxr-xr-x 1 vince vince 5199757 Mar  7 17:16 libgsl.so.0.10.0
    Dc je sais pas si tout y est par rapport a ce que vs disiez (soname etc...)

    Et enfin, dans le lien que vous m'avez donné, il est écrit:
    If you can't or don't want to install a library in a standard place (e.g., you don't have the right to modify /usr/lib), then you'll need to change your approach. In that case, you'll need to install it somewhere, and then give your program enough information so the program can find the library... and there are several ways to do that. You can use gcc's -L flag in simple cases.
    Ce qui est mon cas, et c'est ce que j'ai fait. Pourquoi le -L ne fonctionne pas?

    J'ai essayé de modifier le LD_LIBRARY_PATH, ca a marché, mais bon je me vois mal retaper les commandes necessaire a chaque redémarrage ou a chaque nouvelle console...

  6. #6
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    lrwxrwxrwx 1 vince vince 16 Mar 7 17:16 libgsl.so -> libgsl.so.0.10.0
    lrwxrwxrwx 1 vince vince 16 Mar 7 17:16 libgsl.so.0 -> libgsl.so.0.10.0
    Voila les 2 liens, le linker name (sans numero de version) et le soname(avec le numero de version principal). Donc tout est ok de ce point de vue la.
    Concernant l'absence de ldconfig c'est tres etonnant (j'ai une fedora sous la main, et ya aucun probleme). Es tu sur d'avoir bien cherché ?

    Maintenant si tu ne peux pas mettre ta librairie dans /usr/lib, tu n'as effectivement pas le choix, tu vas etre obligé de lancer ton executable en precisant le LD_LIBRARY_PATH (je compatis, j'ai du le faire pendant un long moment sur un projet)

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    snif...

    Pr ldconfig, elle est présente, ms je sais pas pk elle ne fonctionne pas (linux est probablement encore plein de mystères pour moi...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [vince@ecniv sbin]$ ll | grep ldconfig
    -rwxr-xr-x 1 root root  605472 Mar  7  2006 ldconfig
    [vince@ecniv sbin]$ ldconfig -p
    bash: ldconfig: command not found
    En fait en regardant de plus pret, j'ai peut être pas les droits? (je suis pas super utilisateur sur la machine...)
    Pourtant je vois les droits d'execution pr tt le monde...

    Mais je comprends toujours pas pourquoi le -L n'a aucun effet sur le linker...

  8. #8
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    la commande a taper n'est pas ldconfig, mais /sbin/ldconfig

    Sinon pour ton soucis de "linker", je crois que tu confonds 2 choses (arrete moi si je me trompe) :

    Le linker est l'outil exécuté apres le compilateur et qui permet de lier ensemble les fichiers objets (.o) en un seul fichier executable. C'est souvent pas evident de distinguer compilateur et linker car les etapes sont souvent faites l'une apres l'autre. -L est une option du linker de gcc, rien de plus.

    D'apres ce que tu as dis ton soucis est au moment de l'execution. Ce n'est donc pas un probleme de linker mais un probleme de chargement des librairies. Et la ce qui compte, c'est les repertoires systemes prevus pour les bibliotheques (tel que /usr/lib) et eventuellement LD_LIBRARY_PATH pour rajouter des repertoires supplementaires (meme si c'est tres moche).

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Ah tien je savais pas qu'il fallait spécifier le répertoire pour certaines commandes... Décidément j'ai encore bcp a apprendre sur linux

    Sinon oui je maitrise pas encore bien la théorie qu'il y a derrière le compilateur et le linker, et dc je pensais qu'en spécifiant le -L/home/(...) on donnai l'information necessaire pour que le programme puisse trouver les librairies présentes dans le chemin que je lui fournit...
    Du coup je vois pas bien l'interet du -L


    En tout cas merci a toi pour toutes ces précisions

  10. #10
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Si tu avais fait man ldconfig, tu aurais vu qu'il faut être root.
    C'est d'ailleurs pour celà que j'ai mis un # devant la commande, voir mon post précédent.

    Ceci dit, vu que Ksempac a posté le lien du HOWTO, il n'y a pas grand chose à rajouter. C'est la meilleure référence, à ma connaissance.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2012, 17h40
  2. Réponses: 5
    Dernier message: 24/05/2011, 11h46
  3. error while loading shared libraries: libc.so.6
    Par vacknov dans le forum Mandriva / Mageia
    Réponses: 11
    Dernier message: 22/11/2007, 21h00
  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