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 :

Compiler avec une librairie partagée qui existe déjà


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut Compiler avec une librairie partagée qui existe déjà
    Bonjour,

    Voilà mon problème :
    Je voudrais modifier un logiciel (apellons le toto) dont j'ai les sources, et qui à la compilation produit une librairie partagée (libtoto.so)

    Mais ce logiciel toto existe également dans mon pc (donc a sa librairie partagée dans /usr/lib/libtoto.so que je voudrai garder pour pouvoir lancer le logiciel original)

    Donc pour compiler un programme a moi qui utilise cette librairie que j'ai modifiée, je fait :
    gcc -o test test.c -L/chemin_vers_montoto -ltoto

    Mais si je lance ./test il va aller cherche libtoto.so dans /usr/lib et non dans /chemin_vers_montoto/libtoto.so

    Alors comment faire pour qu'il aille chercher la même librairie qu'à la compilation ?

    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    J'ai trouvé deux solutions (je n'ai testé que la première), qui ne sont pas vraiment du ressort du langage C, donc désolé pour le hors sujet, mais comme je compile avec gcc je pensais qu'il pouvait y avoir une solution plus en rapport avec le C ou le compilateur C.

    Donc :
    Il faut utiliser /lib/ld-linux.so.2 avec l'option --library-path pour lancer le programme.
    Sinon on peut aussi modifier LD_LIBRARY_PATH

    Ces solutions sont à utiliser bien évidement dans l'optique de debugages ou de développement.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oui pour une raison logique :

    contrairement à une biblothèque statique, où le code de la fonction appelée est recopié dans ton binaire, dans une librairie partagée c'est l'adresse qui est stockée dans ton binaire.

    Mais cette adresse est physique : tel chemin + tel fichier + tel offset.

    Ce qui fait que normalement, et c'est l'inconvénient majeur des librairies partagées, elles douvent se stiuer exactement au même endroit sur la machine de compilation et d'éxécution.

    Grâce à ce flag, tu "bypass" cet inconvénient.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    c'est l'inconvénient majeur des librairies partagées, elles douvent se stiuer exactement au même endroit sur la machine de compilation et d'éxécution.
    C'est une spécificité de nux ?
    On n'a pas ce genre de problème sous Windows...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben disons que tu as la meme chose (voir les options indiquees par pasdeface).

    Mais ce qu'il faut comprendre (et ton pointeur le sous-entend) c'est la maniere dont ca fonctionne..

    Et que donc ca ne peut pas etre n'importe ou...

    D'ailleurs, ta page montre le chemin par defaut de Windows, et que pour le changer il faut aller changer un REGISTRY...

    Ce qui bien entendu n'est franchement pas favorise sous nux...

    De plus, le PATH sous nux est pour les binaires, pas les bibliotheques.

    Mais ce que je voulais dire, c'est qu'il etait essentiel de comprendre le mecanisme pour comprendre pourquoi ca ne peut pas marcher a tous les coups.

    Et d'ailleurs, encore une fois, c'est dans la philosophie Windows et anti-philosophie nux de chercher localement pour une "dll" tierce...

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/12/2014, 17h42
  2. Compilation avec une librairie.
    Par katcha95 dans le forum Débuter
    Réponses: 5
    Dernier message: 27/11/2009, 16h37
  3. Réponses: 0
    Dernier message: 26/01/2009, 16h47
  4. Compilation "javac" avec une librairie .jar
    Par visiwi dans le forum Langage
    Réponses: 1
    Dernier message: 12/07/2008, 18h12
  5. Compiler en debug avec une librairie en release
    Par Philippe320 dans le forum MFC
    Réponses: 4
    Dernier message: 25/11/2005, 17h33

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