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

Linux Discussion :

Liens symboliques déférencement


Sujet :

Linux

  1. #1
    Invité
    Invité(e)
    Par défaut Liens symboliques déférencement
    Bonjour,

    J'utilise dans un source Pascal (en Lazarus) un connecteur BDD dont le protocole est défini comme "mysql-5". Concrètement, ce connecteur a besoin pour fonctionner qu'il existe une libmysql.so.

    Or sur mon Linux, il existe déjà un lien symbolique libmysql.so utilisé par un autre programme qui pointe sur une librairie "en dur" disons libmysqlclient.so.xx (Mysql 4.x).

    Mon développement actuel doit pointer sur une libmysqlclient.so.yy (Mysql 5.x)

    Dans un premier temps, j'ai rebaptisé dans le répertoire du source libmysqlclient.so.yy en libmysql.so... en oubliant que le lien restait prioritaire. Concrètement, l'appel à libmysql.so pointe sur la "vieille" libmysqlclient.so.xx... (et non pas sur le fichier libmysqlclient.so.yy rebaptisé en libmysql.so).

    Dans un deuxième temps, une ligne de mon code a déférencé le lien libmysql.so... mais dans ce cas, l'autre programme ne fonctionne plus... Le déférencement est valable pour toute la session.

    Comment procéder ?

    Merci. Cordialement. Gilles

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 692
    Points : 30 989
    Points
    30 989
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par selzig Voir le message
    Or sur mon Linux, il existe déjà un lien symbolique libmysql.so utilisé par un autre programme qui pointe sur une librairie "en dur" disons libmysqlclient.so.xx (Mysql 4.x).

    Mon développement actuel doit pointer sur une libmysqlclient.so.yy (Mysql 5.x)
    Donc t'as une vieille librairie MySQL v4 et il te faudrait MySQL v5 !!!
    Installe la librairie MySQL v5 car il te la faut. Ce n'est pas le nom qui compte, c'est son contenu !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Oui évidemment, on peut envisager la solution sous cet angle. Un petit bémol cependant... Il faut supposer que le premier programme accepte la bibli mySQL5...

    Et d'une manière générale, cela ne résoud pas vraiment le problème. Je crois me souvenir l'avoir rencontré lors de l'installation de Gimp. J'ai eu besoin de 2 versions de ce logiciel en attendant que le portage des scripts Fu de l'ancienne vers la nouvelle version. Le problème est apparu avec des versions de Gtk incompatibles.
    J'ai réglé le problème en passant sous Windows...

    Donc je réitère ma question : quand 2 programmes font référence au même lien ou au même nom de fichier sous Linux (dont il n'est pas précisé l'adresse absolue) [C'est le cas pour mon connecteur], et que cette référence correspond dans la réalité à deux .so différentes (ici libmysql.so pour libmysclclient.so.xx et libmysclclient.so.yy), comment procède-t-on ?

    Une intervention sur la LD_LIBRARY_PATH ou/et la table des inodes permet-elle de résoudre le problème ? Si tel est le cas, comment ?

    Cordialement. Gilles

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    tu crées un lien symbolique libmysql.so qui pointe vers libmysqlclient.so.yy dans le répertoire de ton programme et tu mets à jour ton LD_LIBRARY_PATH de tel sorte que le répertoire de ton nouveau lien se retrouve en premier
    setenv $LD_LIBRARY_PATH NewPath:${LD_LIBRARY_PATH}

    ce qui peut être fait aussi, c'est de faire
    setenv $LD_LIBRARY_PATH .:${LD_LIBRARY_PATH}
    et de créer deux libmysql.so dans les répertoires de test deux programmes qui pointent vers la librairie qu'il faut.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse Ashin.

    Donc si je comprends bien, pour répondre à mon problème, compte tenu de mes contraintes, il faut modifier le LD_LIBRARY_PATH à chaque lancement de mes 2 programmes... ce qui par conséquent empêche de les utiliser de manière simultanée. J'étais déjà arrivé à cette conclusion, mais je la trouvais absurde et donc probablement erronée... d'où ma question sur ce forum !

    Mais dans ce registre, en programmation sous Linux, j'ai déjà rencontré la gestion des beep...

    Cordialement. Gilles

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 692
    Points : 30 989
    Points
    30 989
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par selzig Voir le message
    Bonjour,

    Oui évidemment, on peut envisager la solution sous cet angle. Un petit bémol cependant... Il faut supposer que le premier programme accepte la bibli mySQL5...
    Dans 99,9% des cas, un programme tournant avec une librairie version X tournera aussi avec la librairie version X+1 (l'inverse étant moins courant). Mais ok, t'as le droit de vouloir tourner avec les 2 librairies en parallèle

    Citation Envoyé par selzig Voir le message
    Merci pour votre réponse Ashin.

    Donc si je comprends bien, pour répondre à mon problème, compte tenu de mes contraintes, il faut modifier le LD_LIBRARY_PATH à chaque lancement de mes 2 programmes... ce qui par conséquent empêche de les utiliser de manière simultanée.
    Absolument pas !!!

    Tu crées un script shell adapté à chaque programme. Chaque script shell quand il sera lancé récupèrera une copie du LD_LIBRARY_PATH. Mais une fois qu'ils sont lancés, ils génèrent chacun un processus qui possède son propre environnement indépendant. Et chaque environnement peut modifier sa propre copie de son LD_LIBRARY_PATH sans gêner les autres

    Exemples
    script1
    Code /bin/bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/bash
     
    export LD_LIBRARY_PATH=chemin n° 1:$LD_LIBRARY_PATH
    programme1

    script2
    Code /bin/bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/bash
     
    export LD_LIBRARY_PATH=chemin n° 2:$LD_LIBRARY_PATH
    programme2

    D'ailleurs ces scripts étant quasiment les mêmes, autant créer un script plus générique qui recevra en paramètre les infos nécessaires et qui se chargera lui-même de sélectionner le chemin et le programme

    script commun
    Code /bin/bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
     
    case $1 in
        1)
            export LD_LIBRARY_PATH=chemin n° 1:$LD_LIBRARY_PATH
            programme1
            ;;
        2)
            export LD_LIBRARY_PATH=chemin n° 2:$LD_LIBRARY_PATH
            programme2
            ;;
    esac

    Et tu le lances en lui mettant 1 ou 2.

    Citation Envoyé par selzig Voir le message
    Merci pour votre réponse Ashin...
    PS: le tutoiement est assez courant sur les forums. Ici pas de notion de hiérarchie, de distance ou de catégorie socio professionnelle. Il y a simplement ceux qui ont besoin d'infos et ceux qui ont les susdites infos. Rien de plus.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Sve@r,

    Merci pour votre (ta) réponse qui en effet fonctionne... Le cas est rare ? Cela supposerait une compatibilité ascendante parfaite... Je n'ai pas de chance, j'ai rencontré quelques problèmes. Dans mon cas : utilisez-vous mySQL ? http://thingsilearn.wordpress.com/20...-4-vs-mysql-5/. Un peu gênant, n'est ce pas quand on ne peut pas modifier les réglages des serveurs mySQL comme c'est mon cas ? Avec une version 5, je ne peux pas me connecter à mon logiciel version 4... Certes, il fait appel à une BDD rarissimement utilisée et notamment à sa fonction "password" tout à fait compatible entre les versions et à ce titre mon développement doit être tout à fait "original".

    Tout aussi "original" est mon vouvoiement, je vous l'accorde. Mais avant de l'analyser sous l'angle de la "lutte des classes" ou sous celui d'un simple échange fonctionnel "déshumanisé", peut être pourrait-on simplement et "primairement" l'assimiler à une marque de respect et de bienséance. Même s'il n'est pas naturel pour vous (je parle du vouvoiement évidemment), il est encore usuel dans la société. Si on se rencontrait demain dans un salon informatique au hasard des allées, vous me tutoyeriez de prime abord sous prétexte que nous appartenons tous deux à "la grande famille de l'informatique"? Moi, pas.

    En ce qui me concerne, pour le premier contact avec un inconnu quelque soit le lieu et la situation, j'utilise le vouvoiement... et les rédacteurs de ce forum me sont inconnus dans leur grande majorité. Et même en me plaçant sur votre terrain de réflexion et d'argumentation, je n'ai rien remarqué dans la société qui me pousse à abandonner la "distanciation" comme vous dites... Il semblerait que sur les forums ce ne soit pas usuel ? Dans ce cas, je demande simplement un peu de tolérance. Vous acceptez mon "originalité", mon vouvoiement qui est naturel pour moi bien qu'il ne le soit pas pour vous, et réciproquement j'accepte vos us et coutumes sur votre forum, c'est à dire votre tutoiement dans les mêmes conditions.

    Ceci dit, merci pour votre solution technique...

    Cordialement. Gilles
    Dernière modification par Invité ; 22/01/2010 à 14h48.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 692
    Points : 30 989
    Points
    30 989
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par selzig Voir le message
    Bonjour Sve@r,

    Merci pour votre (ta) réponse qui en effet fonctionne... Le cas est rare ? Cela supposerait une compatibilité ascendante parfaite... Je n'ai pas de chance, j'ai rencontré quelques problèmes. Dans mon cas : utilisez-vous mySQL ? http://thingsilearn.wordpress.com/20...-4-vs-mysql-5/. Un peu gênant, n'est ce pas quand on ne peut pas modifier les réglages des serveurs mySQL comme c'est mon cas ? Avec une version 5, je ne peux pas me connecter à mon logiciel version 4... Certes, il fait appel à une BDD rarissimement utilisée et notamment à sa fonction "password" tout à fait compatible entre les versions et à ce titre mon développement doit être tout à fait "original".
    Malheureusement je n'utilise pas MySQL mais PostgreSQL. Je ne vais pas développer les avantages et inconvénients de ces deux excellents outils. Disons simplement que personnellement je préfère PostgreSQL.

    Concernant la compatibilité ascendante dont tu parles, je ne peux pas te dire. Mais généralement elle est assez facile à mettre en oeuvre donc je n'en suis pas étonné. Mais cette discussion devient de toute façon plus ou moins inutile vu que l'action sur LD_LIBRARY_PATH permet de choisir à loisir l'appel de la v4 ou de la v5.

    Citation Envoyé par selzig Voir le message
    Tout aussi "original" est mon vouvoiement, je vous l'accorde. Mais avant de l'analyser sous l'angle de la "lutte des classes" ou sous celui d'un simple échange fonctionnel "déshumanisé", peut être pourrait-on simplement et "primairement" l'assimiler à une marque de respect et de bienséance. Même s'il n'est pas naturel pour vous (je parle du vouvoiement évidemment), il est encore usuel dans la société. Si on se rencontrait demain dans un salon informatique au hasard des allées, vous me tutoyeriez de prime abord sous prétexte que nous appartenons tous deux à "la grande famille de l'informatique"? Moi, pas.

    En ce qui me concerne, pour le premier contact avec un inconnu quelque soit le lieu et la situation, j'utilise le vouvoiement... et les rédacteurs de ce forum me sont inconnus dans leur grande majorité. Et même en me plaçant sur votre terrain de réflexion et d'argumentation, je n'ai rien remarqué dans la société qui me pousse à abandonner la "distanciation" comme vous dites... Il semblerait que sur les forums ce ne soit pas usuel ? Dans ce cas, je demande simplement un peu de tolérance. Vous acceptez mon "originalité", mon vouvoiement qui est naturel pour moi bien qu'il ne le soit pas pour vous, et réciproquement j'accepte vos us et coutumes sur votre forum, c'est à dire votre tutoiement dans les mêmes conditions.
    Oui, l'exemple de la rencontre dans un salon est un bon argument mais un forum est plutôt perçu comme les forums antiques où les gens se parlaient d'égal à égal. Mais bon, aucun problème pour accepter ton vouvoiement. Personnellement je suis plutôt gêné de ne pas faire de même mais comme t'acceptes aussi mon tutoiement...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Sve@r

    Tout à fait d'accord. J'utilise postgreSQL sur nos serveurs internes et je confirme... c'est un très bon produit ! Nous utilisons mySQL lorsque la base est hébergée (en général hébergement mutualisé). Mais hormis ce petit problème de "password" et un problème de tri des caractères accentués sur des clés uniques en UTF-8 (que ne rencontre pas PostgreSQL : http://www.developpez.net/forums/d75...sert-order-by/), cela marche très bien aussi.


    On est d'accord sur le reste aussi.

    Bon WE. Cordialement. Gilles

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

Discussions similaires

  1. Lien symbolique entre Apache et Tomcat sous Debian
    Par rohstev dans le forum Administration système
    Réponses: 17
    Dernier message: 13/05/2008, 10h33
  2. lien symbolique
    Par cubepiege dans le forum Windows
    Réponses: 5
    Dernier message: 12/08/2005, 14h26
  3. Lien symbolique dansle repertoire du ftp - Proftpd
    Par __fabrice dans le forum Réseau
    Réponses: 8
    Dernier message: 20/05/2005, 20h31
  4. Précisions sur lien symbolique
    Par SteelBox dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 19/09/2004, 15h41
  5. [Kylix] pb avec lien symbolique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h16

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