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 averti
    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
    Points : 406
    Points
    406
    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 averti
    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
    Points : 406
    Points
    406
    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 éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    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...

  5. #5
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    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