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 de liaison dynamique...


Sujet :

Linux

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut Problème de liaison dynamique...
    Bonjour,

    Voilà, j'ai créé un ptit plugin avec extension *.so et au lancement de mon programme (que je suis aussi en train de créer avec une equipe), j'obtient ceci lorsque le programme veut charger le plugin:

    plugin_name.so: « Phentize » du fichier ELF ne concorde pas avec la taille prévue
    Que cela veut-il dire ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    J'imagine que tu as voulu ecrire "phentsize" (en anglais, l'erreur est ELF file's phentsize not the expected size). Cette erreur se produit le plus souvent lorsque le fichier partage .so n'a pas ete compile avec l'option -shared. Est-ce le cas?

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Heu le message c'est pas moi qui l'a ecrit, c'est certainement ld qui l'affiche !
    Pour la compilation, voici le makefile du plugin de test, y compris aussi les config pour gtk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #On indique les librariries a passer lors de l'edition des liens
    LIBS= -ldl
     
    #on utilise gcc comme compilateur par defaut
    CC=gcc
     
    #on indique les sources de notre programme
    SRCS=plugin_name.c
     
    #on indique les modules correspondants aux fichiers sources
    OBJECTS=$(SRCS:.c=.o)
     
    # Les flags d'erreurs
     
    export ERROR_CFLAGS = -Wall -ansi
     
    # Les flags  de link
     
    GLIB_CFLAGS = $$(pkg-config --cflags glib-2.0)
    PANGO_CFLAGS = $$(pkg-config --cflags pango)
    GTK_CFLAGS := $$(pkg-config --cflags gtk+-2.0)
     
    CFLAGS = -c $(ERROR_CFLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) $(GTK_CFLAGS)
     
    #le chemin vers la commande ldconfig
    LDCONFIGPATH=/sbin/ldconfig
     
     
    #on construit un programme et deux librairies partagees
    all: dolibs 
     
    #les librairies
    dolibs: plugin_name.so
    	$(LDCONFIGPATH) -n .
     
    #on construit la premiere lib partagee
    plugin_name.so: plugin_name.c
    	$(CC) $(CFLAGS) -fPIC -c plugin_name.c
    	$(CC) $(CFLAGS) -o plugin_name.so -shared plugin_name.c
     
     
    clean:
    	rm -f *.o *~ core *.so* plugin_name
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par CSoldier
    Heu le message c'est pas moi qui l'a ecrit, c'est certainement ld qui l'affiche !
    Une erreur dans la localisation, alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #on construit la premiere lib partagee
    plugin_name.so: plugin_name.c
    	$(CC) $(CFLAGS) -fPIC -c plugin_name.c
    	$(CC) $(CFLAGS) -o plugin_name.so -shared plugin_name.c
    Ok, double passage de cc sur le code source avec l'option -shared, ca doit aller. Alors, je ne comprend pas. L'erreur que tu indiques arrive lorsqu'on tente un dlopen sur une bibliotheque statique...

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par DaZumba
    Alors, je ne comprend pas. L'erreur que tu indiques arrive lorsqu'on tente un dlopen sur une bibliotheque statique...
    Pourtant loin de moi de vouloir ouvrir une lib statique Ce que j'ai touvé bizzard ... sur certains tests que g fait avant celui-ci, quand je compilais une lib.so, sur mon shell elle apparait en couleur (idem que d'autre fichier ELF) mais celle-ci reste en noir alors je sais pas si c'est un bogue du shell ou autre chose ! M'enfin mes 1° tests fonctionnent mais celui-là non, bon il change surtout du fait qu'il utilise un peu GTK et que grace a des pointeurs je passe en paramettre a ma fonction d'initialisation du plugin des adresses vers différentes partie GTK de mon interface principale !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ok, je vois dans le man de gcc:
    Citation Envoyé par man gcc
    `-shared'
    Produce a shared object which can then be linked with other
    objects to form an executable. Not all systems support this
    option. For predictable results, you must also specify the same
    set of options that were used to generate code
    (`-fpic', `-fPIC',
    or model suboptions) when you specify this option.(1)
    Essaie de modifier ton Makefile en ecrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(CC) $(CFLAGS) -fPIC -c plugin_name.c
    $(CC) $(CFLAGS) -fPIC -o plugin_name.so -shared plugin_name.c
    Si ca ne marche pas, alors je ne peux pas t'aider...

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Non c'est pareil !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Question idiote: lorsque tu fais ton dlopen, tu ouvres bien le .so, pas le .o ?

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par DaZumba
    Question idiote: lorsque tu fais ton dlopen, tu ouvres bien le .so, pas le .o ?
    Oui biensur, dans le dossier je ne met que le .so Mais je viens de tester un ptit truc, plus haut je parlais de couleur dans le shell et apparement ce n'est pas un bogue donc quand je compile mes primiers fichiers de tests avec ce makefile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #On indique les librariries a passer lors de l'edition des liens
    LIBS= -ldl
     
    #on utilise gcc comme compilateur par defaut
    CC=gcc
     
    #on indique les sources de notre programme
    SRCS=main.c
     
    #on indique les modules correspondants aux fichiers sources
    OBJECTS=$(SRCS:.c=.o)
     
    #on indique quelques drapeux passes au compilateur
    CFLAGS=-O2 -g -Wall
     
    #le chemin vers la commande ldconfig
    LDCONFIGPATH=/sbin/ldconfig
     
     
    #on construit un programme et deux librairies partagees
    all: test_lib dolibs 
     
    #le programme
    test_lib: $(OBJECTS)
    	$(CC) $(CFLAGS) -o $@ $(OBJECTS) $(LIBS)
     
    #les librairies
    dolibs: test_plugin.so
    	$(LDCONFIGPATH) -n .
    #	ln -sf test_plugin.so.0 test_plugin.so
     
    #on construit la premiere lib partagee
    test_plugin.so: test_plugin.c
    	$(CC) $(CFLAGS) -fPIC -c test_plugin.c
    	$(CC) $(CFLAGS) -shared -Wl,-soname, -o test_plugin.so test_plugin.o
     
     
    clean:
    	rm -f *.o *~ core *.so* test_lib
    Cela marche bien et mon .so est coloré mais rien du tout en ce qui concerne le tout dernier .so que j'essaye de faire !
    Pour infos je viens d'ajouter a la compile de mon programme -ldl pour l'edition des liens mais le probs n'est toujours pas résolu, d'apres moi y'a quelque chose qui cloche dans le compile ou l'edition de liens du plug que j'essaye de faire là !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Oui, le fait que ta shell ne mette pas la bonne couleur est surement un symptome du fait que ton .so n'est en fait pas une bibliotheque partagee... Quelque-chose foire quelque part. C'est peut etre l'utilisation de fonctions GTK dans le module qui empechent le partage ? Desole de n'avoir pu d'aider, en tout cas...

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bon et bien avec un peu de tenacité on arrive a tout ! J'ai reussi, en fait c'est ce que je pensais, c'est durant l'edition de liens que ca deconnais. Voici le makefile final... ca peut tourjours servir a quelqu'un !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #on utilise gcc comme compilateur par defaut
    CC=gcc
     
    #on indique les sources de notre programme
    SRCS=main.c
     
    #on indique les modules correspondants aux fichiers sources
    OBJECTS=$(SRCS:.c=.o)
     
     
    #on indique quelques drapeux passes au compilateur
    GLIB_CFLAGS = $$(pkg-config --cflags glib-2.0)
    PANGO_CFLAGS = $$(pkg-config --cflags pango)
    GTK_CFLAGS := $$(pkg-config --cflags gtk+-2.0)
     
    CFLAGS=-O2 -g $(GLIB_CFLAGS) $(PANGO_CFLAGS) $(GTK_CFLAGS)
     
     
    #le chemin vers la commande ldconfig
    LDCONFIGPATH=/sbin/ldconfig
     
     
    #on construit un programme et deux librairies partagees
    all: dolibs 
     
     
    #les librairies
    dolibs: plugin_name.so
    	$(LDCONFIGPATH) -n .
     
    #on construit la premiere lib partagee
    plugin_name.so: plugin_name.c
    	$(CC) $(CFLAGS) -fPIC -c plugin_name.c
    	$(CC) $(CFLAGS) -shared -Wl,-soname, -o plugin_name.so plugin_name.o
     
     
    clean:
    	rm -f *.o *~ core *.so* plugin_name
    Sinon je te remercie quand meme
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par CSoldier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #on indique quelques drapeux passes au compilateur
    CFLAGS=-O2 -g -Wall
    Ajoute les options -W -std=c99 -pedantic pour plus de diagnostics.

    Pour ton coup de shell qui colore ou non le fichier, essaye ave la commande shell file pour savoir quel est le type exact du fichie que tu obtiens. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file /usr/lib/libelf-0.96.so 
    /usr/lib/libelf-0.96.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped

  13. #13
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bah disons que maintenant ca fonctionne !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  14. #14
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Un , peut-etre ?

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

Discussions similaires

  1. Table lié (liaison dynamique)
    Par willytito dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2007, 10h20
  2. [1.5] Ellipse et liaison dynamique
    Par bulbo dans le forum Langage
    Réponses: 4
    Dernier message: 29/09/2006, 20h09
  3. Liaison dynamique !
    Par Franck.H dans le forum Linux
    Réponses: 2
    Dernier message: 16/08/2006, 15h25
  4. Liaison dynamique et vitesse des programmes
    Par sebzinzin dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2006, 10h51
  5. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 12h34

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