Mon PATH n'est pas respecté ! Ca ne va path !

Bonjour
mon PATH donne l'accès à /usr/lib64 qui contient la librairie crt1.o
Or si je fais: whereis crt1.o il ne me la trouve pas, pourquoi !!!

Détails:
PATH=.:/usr/local:/usr/bin/X11:/etc:/usr/etc:/usr/ucb:/usr/ccs/bin:/lib:/usr/bin:/bin:/usr/lib:/usr/lib64:/home/local: ...

home> ls /usr/lib64/crt1.o
/usr/lib64/crt1.o
home> whereis crt1.o
crt1:

merci de votre aide !

4 réponses

  1. Bonjour,

    tout simplement parce que la commande whereis ne fait des recherche que dans les repertoires par defaut de linux et n'utilise pas la variable $PATH.

    tape "man whereis" pour verifier

    Tu devra te faire un petit script shell personnalisé à base de find pour obtenir une recherche particuliere. Tu pourra te créer un répertoire bin dans ton $HOME et l'ajouter a ton .bashrc perso par exemple, si bash est ton shell par defaut, ou a /etc/profile si tu es un faineant...

    @+
    1. Salut,
      crt1.o n'est pas un éxetutable, mais un fichier objet utlisé par ld qui va
      permettre le lancement d'un processus et appeler la fonction main. Il s'agit
      d'un fichier objet qui ne peut être que lié statiquement dans le fichier exécutable.
      Ca sert donc à rien de jouer avec PATH pour le trouver.
      A+, crabs
      1. Merci tous, Merci crabs

        c'est vrai que which ne me dit rien sur mon crt1.o
        En fait, mon vrai pb est que lors d'une édition de lien (ld) le crt1.o n'est pas trouvé ! Il le cherche dans /usr/lib alors qu'il est bien dans /usr/lib64 qui lui est déclaré dans mon PATH et mon LD_LIBRARY_PATH

        Alors comment faire !!! Pourquoi ne le trouve-t-il pas !

        Voici le résultat de la compil:
        make
        ifort -o iapetus compo.o iniout.o endout.o corps.o thermo.o reduction.o chgbase.o triage.o output.o dataread.o iniden.o verbase.o inibase.o filtre.o conduc.o sortie.o newton.o lissage.o evaluation.o inverseD.o systeme.o fctpar.o produit.o
        ld: cannot open /usr/lib/crt1.o: No such file or directory

        ls /usr/lib64/crt*
        /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib64/crtn.o

        PATH=/usr/lib64:.:/usr/local:/usr/bin/X11:/etc:/usr/etc ....
        LD_LIBRARY_PATH=/usr/lib64:/opt/intel_fc_80/lib:/opt/intel_cc_80/lib

        MErci de ton aide
      2. Modérateur
        @PhilippeSalut,

        Essaie un lien symbolique :
        ln -s /usr/lib64/crt1.o  /usr/lib/crt1.o
        ;-))
      3. @jipicymerci
        ça marche mais il me demande toutes les librairies de /usr/lib64 les unes après les autres !!!
        Il doit y avoir un autre moyen
        Pourquoi ne va-t-il pas dans /usr/lib64 que je lui ai déclaré !!!
        As-tu une idée ?
      4. @PhilippeRe-

        Juste un truc...
        Tes variables PATH et LD_LIBRARY_PATH, tu les as définies dans le ".bashrc" (et dans certain cas le " .bash_profile"), mais les as-tu exportées ???
        export PATH  LD_LIBRARY_PATH
        ;-))
      5. @Philippebonsoir

        y'avais un lien avec ecrit: discussion similaire, j'ai cliqué dessus, et je vois une discussion a laquelle je ne comprend rien.
        COmme j'ai lu quand m^me (curiosité, curiosité) je vous dis bonne soiré et je vais retrouver ma boite de nurofen.

        au revoir
    2. Modérateur
      Notons au passage que les commandes locate, slocate (combinées avec updatedb), et which servent aussi à localiser des fichiers...

      Mais à part ça crabs a parfaitement résumé le problème...
      1. Modérateur
        Euh en tout cas le "." en début de PATH c'est un peu abusif. Imagine que quelqu'un crée un executable "cd" dans ton home c'est vraiment très dommage (surtout si celui-ci est malveillant :p).

        Bon sinon, comme dis précédemment, dans ton .bashrc (ou .bash_login) il faut bien définir tes variables ainsi :
        export PATH=${PATH}:/un/repertoire:/un/repertoire2

        Bonne chance