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 :

problème .so non detecté


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut problème .so non detecté
    Bonjour,

    Je suis en train de travailler avec une API qu'un client m'a livré.
    J'ai donc un fichier ex.so qui se trouve dans /rep/ .
    Je compile en utilisant la commande :

    gcc main.c -o main.exe -L /rep/ -l ex.so

    et le ld me renvoie l'erreur cannot find ex.so alors qu'il est bien présent dans le reperoire indiqué.

    Je ne vois pas quoi faire de plus, on me parle de faire un makefile mais je ne vois pas l'interet pour compiler un seul fichier main.c

    si vous pouvez m'aider ...
    d'avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hola señor!

    alors dans le man de gcc, je vois ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           -YP,répertoires
               Rechercher les bibliothèques spécifiées avec -l dans les répertoires répertoires, et aucun autre.
    Pourrais-tu tester avec cette option et voir ce que ça donne?

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Quelle version de gcc utilises-tu, avec quel linker ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci de vos reponses

    Ma version de gcc est la 4.1.2 20070626 (redhat 4.1.2-13)
    Ma version de ld est 2.17.50.0.3-6 200601715

    Et l'option -YP n'est pas reconnue par ce gcc.

    Je suis sous fedora 6 (je n'ai pas trop le choix).
    Vous pensez que les versions de gcc sont peut être trop anciennes ??
    En tout ca le .so est bien là et ld ne le trouve pas !

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicoesenlamierda Voir le message
    Bonjour,

    Je suis en train de travailler avec une API qu'un client m'a livré.
    J'ai donc un fichier ex.so qui se trouve dans /rep/ .
    Je compile en utilisant la commande :

    gcc main.c -o main.exe -L /rep/ -l ex.so

    et le ld me renvoie l'erreur cannot find ex.so alors qu'il est bien présent dans le reperoire indiqué.
    Ca fait longtemps que j'ai plus compilé un programme C mais il me semble me souvenir que l'option "-ltoto" n'est qu'un raccourci signifiant "/usr/lib/libtoto.a" (préfixe "/usr/lib" pouvant être modifié avec -L). Donc en écrivant "-Lrep -lex.so", le compilo cherche "rep/libex.so.a"

    Tente gcc main.c ex.so -o main.exe

  6. #6
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Il faut bien specifier la librairie avec -l et le path 'non standard' avec -L.
    Mais comme expliqué ci-dessus le linker ajoute un préfixe et un suffixe au nom de la lib tu dois donc faire ainsi :
    x renomer ex.so en libex.so
    x appeler la compilation avec gcc main.c -o main.exe -L /rep/ -l ex

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bien vu les gars !
    C'etait bien ça -l<nom_de_la_librairie>
    Merci a tous pour votre aide

  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 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bizulk Voir le message
    Il faut bien specifier la librairie avec -l et le path 'non standard' avec -L.
    Mais comme expliqué ci-dessus le linker ajoute un préfixe et un suffixe au nom de la lib tu dois donc faire ainsi :
    x renomer ex.so en libex.so
    x appeler la compilation avec gcc main.c -o main.exe -L /rep/ -l ex
    Ca marche mais ce n'est pas nécessaire car en faisant
    gcc main.c rep/ex.so -o main.exe
    ça marche aussi (j'ai testé aujourd'hui) et ça ne nécessite pas de modifier le nom de la librairie.

  9. #9
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Je suis d'accord mais en principe on fait ainsi pour les fichiers objets générés pendant la compilation et on explicite les librairies avec l'opion -l, c'est plus clair dans un makefile.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bizulk Voir le message
    Je suis d'accord mais en principe on fait ainsi pour les fichiers objets générés pendant la compilation et on explicite les librairies avec l'opion -l, c'est plus clair dans un makefile.
    Ah oui je vois. Nos propres librairies sont juste liées par leur nom et les librairies publiques sont liées avec "-l". Mais n'inverses-tu pas la cause et la conséquence ? C'est parce que les librairies publiques se nomment toutes "libmachin.so" qu'on peut les lier avec "-l" et de fait, qu'elles sont liées par "-l". Ce n'est pas parce qu'elles sont publiques...

    Bon de toute façon c'était juste pour parler. Le principal est que nicoesenlamierda ait compris comment intégrer une librairie dans son exe. Mais pensera-t-il au LD_LIBRARY_PATH ???

  11. #11
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Librairie publique ou privée c'est ne pas le problème pour moi. Oui tu peux créer ta librairie statique en lui donnant un nom arbitraire, mais par 'convention' une librairie est crée en lui donnant un prefixe 'lib' et un suffixe .a/so pourqu'on puisse facilement la reconnaître et la paramétrer dans une IDE du type eclipse/CDT.

    Pour le reste il faut effectivement qu'il configure l'environnement conformément à l'installation de cette lib.
    ++

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

Discussions similaires

  1. [RegEx] Problème slash non detecté
    Par Sylv1psg dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2010, 16h29
  2. [hardware] disque dur non detecté
    Par nounou dans le forum Composants
    Réponses: 7
    Dernier message: 10/05/2005, 00h44
  3. Problème : XML non valide...
    Par loupdeau dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 08/04/2005, 16h12
  4. Disques durs non detectés
    Par gibet_b dans le forum Matériel
    Réponses: 6
    Dernier message: 20/09/2004, 20h29

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