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 :

Shared object au lieu d'exécutable


Sujet :

C

  1. #21
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Normal, tu n'as pas les options d'édition des liens, donc le linker ne trouve pas la définition des symboles.



    Comme je n'ai rien concernant gtk3 sur ma vieille machine, après avoir récupéré les 3 fichiers source j'ai viré tout ce qui concernait gtk3, j'ai remplacé dans main.c toute la proc main par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      printf("hello world!\n");
      return 0;
    histoire d'avoir quelque chose à voir, j'ai ensuite exécuté la ligne de commande que j'ai donnée à 12h50 en y remplaçant simplement gtk3 par gtk2 et ça a compilé et l'exécution affiche bien
    Nom : helloworld.png
Affichages : 149
Taille : 8,5 Ko
    comme on est en droit de s'y attendre.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #22
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Dans ton .h, il y a des #define avant un #include. C'est généralement une mauvaise idée, car ils viennent polluer le fichier inclus.
    Généralement, ce n'est rien, mais sait-on jamais.

    C'est aussi pour cela qu'on cherche des noms long et complexe pour les gardes d'inclusions

    Dans le même ordre d'idée, tu as des dizaines de variables globales.
    Ne pourrais-tu pas en faire une seule structure, globale dans un premier temps?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #23
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 92
    Points
    92
    Par défaut
    je viens de tester avec les exemples gtk3 présents dans les dépots debian.
    en copiant le dossier de l'appli 1 dans mon dossier de sources, que ce soit avec codeblocks qui link avec gcc ou avec la commande suivante j'arrive au même résultat : une bibliothèque partagée comme type affiché par dolphin exécutable seulement par une console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall `pkg-config gtk+-3.0 --cflags` `pkg-config gtk+-3.0 --libs` -I/usr/include/gtk-3.0 exampleappwin.c exampleapp.c main.c -o appli
    ternel : j'ai regroupé mes globales dans une structure et déplacé l'include, pareil
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  4. #24
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bon, on va reprendre à zéro parce que chez moi, ça, ça compile et ça s'exécute :
    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
    //main.c :
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
    #include "callbacks.h"
     
    int main (int argc, char *argv[])
    {
        printf("hello world!\n");
        return 0;
    }
     
    //callbacks.c
    #include <math.h>
    #include <gdk/gdk.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include "callbacks.h"
     
    //callbacks.h
    #ifndef CALLBACKS_H_INCLUDED
    #define CALLBACKS_H_INCLUDED
     
    #define SIGNIFICATIFS   10
    #define MULTIPLICATEUR  8
     
    #include <gtk/gtk.h>
     
    #endif
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall `pkg-config gtk+-2.0 --cflags` `pkg-config gtk+-2.0 --libs` -I/usr/include/gtk-2.0 callbacks.c main.c -o ohm
    Manips : faire fonctionner ce qui est dessus (les 2 .c, le .h et la ligne de commande) sans en changer le moindre caractère.
    C'est pas bon ? Le problème est planqué dans les paramètres dont je parlais ce matin, à voir avec gcc -dumpspecs | grep shared mais pour aller trifouiller là-dedans, c'est un peu à vomir et je n'ai pas la moindre idée de comment faire...
    C'est bon ? alors remplace ce qui a trait à gtk2 par gtk3 sur la ligne de commande et recompile.
    C'est pas bon ? Ton problème est quelque part dans les libs gtk3 et ça me dépasse.
    C'est bon ? Alors remonte le .h petits bouts par petits bouts en compilant à chaque rajout.
    Idem pour le callbacks.c, puis le main.c : tu devrais bien finir par trouver où ça coince.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #25
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par titux Voir le message
    mon souci viendrait de Dolphin ou KDE.
    Il serait peut-être temps d'explorer ces options, maintenant, non ?

    En particulier, sur https://userbase.kde.org/Dolphin, dans la section "Hints, Tips and Troubleshooting",
    il y a ça:

    To solve this issue, you can use File Associations to create an entry for the unrecognized filetype.
    En fait, as-tu déjà essayé d'ouvrir un autre programme que le tien avec Dolphin ?

  6. #26
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par nnovic Voir le message
    Citation Envoyé par titux Voir le message
    mon souci viendrait de Dolphin ou KDE.
    Il serait peut-être temps d'explorer ces options, maintenant, non ?
    Ne l'embrouille pas, tu pars dans la mauvaise direction !

    Tant qu'il y aura ça suite à la compilation :
    Citation Envoyé par titux Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=46ada4e5e25fc120ca052c9beb8bfa5491fc6239, not stripped
    il ne sortira pas de ça :
    Citation Envoyé par titux Voir le message
    dolphin le considère comme une bibliothèque partagée et me propose de l'ouvrir avec un logiciel tiers.
    Sur ce coup-là, Dolphin ayant l'air aussi stupide que l'Explorateur des Windows, pas la peine d'aller explorer des voies annexes qui se termineront en impasses.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #27
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Juste une question, dans ce cas: Est-ce normal d'exécuter une librairie ?

    Citation Envoyé par titux Voir le message
    je ne peux exécuter mon appli finale qu'en ligne de commande
    Citation Envoyé par titux Voir le message
    je peux l'exécuter en choisissant xterm dans la fenetre de sélection
    Citation Envoyé par titux Voir le message
    j'arrive au même résultat : une bibliothèque partagée comme type affiché par dolphin exécutable seulement par une console

  8. #28
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par nnovic Voir le message
    Juste une question, dans ce cas: Est-ce normal d'exécuter une librairie ?
    Surement pas, non.

    Quant à tes quotes, je suspecte des sacs de nœuds car j'ai fait le test suivant : en partant des instructions que j'ai données hier soir à 23h22 et sans rien changer, je me suis contenté de rajouter le flag -shared sur la ldc de compilation avec gcc et d'envoyer : résultat je gagne bien un shared object, et si je double-clique dessus depuis mon explorateur de fichiers, j'ai le même genre de fenêtre me demandant de choisir une application pour ouvrir ce type de fichier.
    Au moins on est cohérent dans l'erreur.

    Par contre la librairie n'est pas exploitable/exécutable en l'état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ./ohm 
    Erreur de segmentation

    alors que si je recompile sans -shared tout va bien :
    Que dire de plus ?
    Attendre ses retours des tests sur mes suggestions (que n'importe qui peut tester aussi, d'ailleurs, histoire de faire avancer le schmilblik)...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #29
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    a tout hasard, vérifie que tu n'as pas d'alias sur gcc, g++ ou ld
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #30
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 92
    Points
    92
    Par défaut
    j'ai trouvé,
    même un bête hello world compilé avec le mini d'options ( gcc toto.c -o toto ) était compilé en bibliothèque partagée sauf si je le compilais avec -static

    j'ai refait une recherche sur le net, en ajoutant l'option -no-pie au linker j'obtiens un exécutable, d'où la ligne de commande qui passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall `pkg-config gtk+-3.0 --cflags` `pkg-config gtk+-3.0 --libs` -I/usr/include/gtk-3.0 callbacks.c main.c -o ohm -lm -no-pie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file ohm
    ohm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=17f860c6c84fc1a5771c8744b7aaaf164c219559, not stripped
    la solution était là :
    https://stackoverflow.com/questions/...cutable-binary

    merci beaucoup à chacun pour le temps et l'énergie passés à m'aider, vous m'avez appris pas mal de choses
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  11. #31
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Oh mon dieu....


    Tu n'es pas le seul à avoir eu peur de voir des vieux projets ne plus fonctionner https://askubuntu.com/questions/9115...n-ubuntu-17-04

  12. #32
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 92
    Points
    92
    Par défaut
    Bktero, je viens de lui faire passer l'astuce au cas où.

    la petite photo finish pour le plaisir :
    Nom : 153339Screenshot20170714200725.png
Affichages : 198
Taille : 14,1 Ko

    encore merci
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  13. #33
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par titux Voir le message
    j'ai trouvé,
    même un bête hello world compilé avec le mini d'options ( gcc toto.c -o toto ) était compilé en bibliothèque partagée sauf si je le compilais avec -static

    j'ai refait une recherche sur le net, en ajoutant l'option -no-pie au linker j'obtiens un exécutable, d'où la ligne de commande qui passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall `pkg-config gtk+-3.0 --cflags` `pkg-config gtk+-3.0 --libs` -I/usr/include/gtk-3.0 callbacks.c main.c -o ohm -lm -no-pie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file ohm
    ohm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=17f860c6c84fc1a5771c8744b7aaaf164c219559, not stripped
    la solution était là :
    https://stackoverflow.com/questions/...cutable-binary

    merci beaucoup à chacun pour le temps et l'énergie passés à m'aider, vous m'avez appris pas mal de choses
    Well done! Incroyable, ce truc !

  14. #34
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par titux Voir le message
    la petite photo finish pour le plaisir :
    Nom : 153339Screenshot20170714200725.png
Affichages : 198
Taille : 14,1 Ko
    Tout ça pour ça ??? T'aurais dû demander !
    --> http://www.electronique-radioamateur...e-couleurs.php

  15. #35
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 92
    Points
    92
    Par défaut
    nnovic : oui fallait le trouver ce truc -_-

    Bktero : hey oui mais c'était plus pour me faire la main sur un petit projet que pour le code couleur en lui-même
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Shared Object
    Par delavega dans le forum Flash
    Réponses: 2
    Dernier message: 27/09/2008, 16h06
  2. Réponses: 1
    Dernier message: 31/12/2007, 09h33
  3. shared Object Flash
    Par delavega dans le forum Flash
    Réponses: 2
    Dernier message: 03/04/2007, 12h22
  4. 8i sur Linux : Erreur loadin shared object file
    Par NGONGO ETABA dans le forum Oracle
    Réponses: 2
    Dernier message: 24/03/2006, 11h40
  5. Afficher les shared objects utilisés
    Par Onarap dans le forum Linux
    Réponses: 5
    Dernier message: 20/05/2005, 15h31

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