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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut Shared object au lieu d'exécutable
    Hello,

    je tourne sous Debian 9 avec kde, j'ai codé en C et gtk une toute petite appli sous codeblocks et gcc.
    contrairement à d'habitude je ne peux exécuter mon appli finale qu'en ligne de commande, dolphin le considère comme une bibliothèque partagée et me propose de l'ouvrir avec un logiciel tiers.

    en faisant un file sur l'exécutable j'obtiens :
    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
    là où sur d'autres applis plus anciennes file me retourne qu'elles sont des exécutables.
    j'ai cherché partout sur le net, dans codeblocks et rapidement dans les options de gcc rien n'y fait et je ne sais comment résoudre ça.

    auriez-vous une idée ?

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut
    Ok, d'après toutes les manips tentées le Shared Object est normal.

    mon souci viendrait de Dolphin ou KDE.
    je peux l'exécuter en choisissant xterm dans la fenetre de sélection mais l'idéal serait de pouvoir s'en passer.

  3. #3
    Membre Expert

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    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 ?

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    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.

  5. #5
    Membre Expert

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    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

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    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)...

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    a tout hasard, vérifie que tu n'as pas d'alias sur gcc, g++ ou ld

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    Par défaut
    Citation Envoyé par titux Voir le message
    auriez-vous une idée ?

    je tourne sous Debian 9 avec kde, j'ai codé en C et gtk une toute petite appli sous codeblocks et gcc.
    Et comme on ne sait pas comment tu l'as compilée, le récipient à idées est au niveau 0...

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut
    ah mince, pardon

    voici le 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #------------------------------------------------------------------------------#
    # This makefile was generated by 'cbp2make' tool rev.147                       #
    #------------------------------------------------------------------------------#
     
     
    WORKDIR = `pwd`
     
    CC = gcc
    CXX = g++
    AR = ar
    LD = g++
    WINDRES = windres
     
    INC = -I/usr/include/gtk-3.0
    CFLAGS = -Wall `pkg-config gtk+-3.0 --cflags`
    RESINC = 
    LIBDIR = -L/usr/lib/x86_64-linux-gnu/
    LIB = 
    LDFLAGS = `pkg-config gtk+-3.0 --libs` 
     
    INC_DEBUG = $(INC)
    CFLAGS_DEBUG = $(CFLAGS) -g
    RESINC_DEBUG = $(RESINC)
    RCFLAGS_DEBUG = $(RCFLAGS)
    LIBDIR_DEBUG = $(LIBDIR)
    LIB_DEBUG = $(LIB)
    LDFLAGS_DEBUG = $(LDFLAGS)
    OBJDIR_DEBUG = obj/Debug
    DEP_DEBUG = 
    OUT_DEBUG = bin/Debug/ohm
     
    INC_RELEASE = $(INC)
    CFLAGS_RELEASE = $(CFLAGS) -O
    RESINC_RELEASE = $(RESINC)
    RCFLAGS_RELEASE = $(RCFLAGS)
    LIBDIR_RELEASE = $(LIBDIR)
    LIB_RELEASE = $(LIB)
    LDFLAGS_RELEASE = $(LDFLAGS) -s
    OBJDIR_RELEASE = obj/Release
    DEP_RELEASE = 
    OUT_RELEASE = bin/Release/ohm
     
    OBJ_DEBUG = $(OBJDIR_DEBUG)/callbacks.o $(OBJDIR_DEBUG)/main.o
     
    OBJ_RELEASE = $(OBJDIR_RELEASE)/callbacks.o $(OBJDIR_RELEASE)/main.o
     
    all: debug release
     
    clean: clean_debug clean_release
     
    before_debug: 
    	test -d bin/Debug || mkdir -p bin/Debug
    	test -d $(OBJDIR_DEBUG) || mkdir -p $(OBJDIR_DEBUG)
     
    after_debug: 
     
    debug: before_debug out_debug after_debug
     
    out_debug: before_debug $(OBJ_DEBUG) $(DEP_DEBUG)
    	$(LD) $(LIBDIR_DEBUG) -o $(OUT_DEBUG) $(OBJ_DEBUG)  $(LDFLAGS_DEBUG) $(LIB_DEBUG)
     
    $(OBJDIR_DEBUG)/callbacks.o: callbacks.c
    	$(CC) $(CFLAGS_DEBUG) $(INC_DEBUG) -c callbacks.c -o $(OBJDIR_DEBUG)/callbacks.o
     
    $(OBJDIR_DEBUG)/main.o: main.c
    	$(CC) $(CFLAGS_DEBUG) $(INC_DEBUG) -c main.c -o $(OBJDIR_DEBUG)/main.o
     
    clean_debug: 
    	rm -f $(OBJ_DEBUG) $(OUT_DEBUG)
    	rm -rf bin/Debug
    	rm -rf $(OBJDIR_DEBUG)
     
    before_release: 
    	test -d bin/Release || mkdir -p bin/Release
    	test -d $(OBJDIR_RELEASE) || mkdir -p $(OBJDIR_RELEASE)
     
    after_release: 
     
    release: before_release out_release after_release
     
    out_release: before_release $(OBJ_RELEASE) $(DEP_RELEASE)
    	$(LD) $(LIBDIR_RELEASE) -o $(OUT_RELEASE) $(OBJ_RELEASE)  $(LDFLAGS_RELEASE) $(LIB_RELEASE)
     
    $(OBJDIR_RELEASE)/callbacks.o: callbacks.c
    	$(CC) $(CFLAGS_RELEASE) $(INC_RELEASE) -c callbacks.c -o $(OBJDIR_RELEASE)/callbacks.o
     
    $(OBJDIR_RELEASE)/main.o: main.c
    	$(CC) $(CFLAGS_RELEASE) $(INC_RELEASE) -c main.c -o $(OBJDIR_RELEASE)/main.o
     
    clean_release: 
    	rm -f $(OBJ_RELEASE) $(OUT_RELEASE)
    	rm -rf bin/Release
    	rm -rf $(OBJDIR_RELEASE)
     
    .PHONY: before_debug after_debug clean_debug before_release after_release clean_release

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    Par défaut
    Citation Envoyé par titux Voir le message
    ah mince, pardon

    voici le makefile :
    en espérant que ça va inspirer des spécialistes de ce bestiau que je ne pratique pas, considérant que pour de "très petites applications", un Makefile plus grand que le .c me hérisse, et pour moi c'est quand même plus rapide de m'en sortir avec une simple ligne de gcc.

    Du coup, dans ta presque centaine de lignes, la ligne gcc concernant ton appli, je ne sais même pas où elle est. Mais nul doute que d'autres sauront la trouver et te dire ce qui coince.

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Par défaut
    en effet le makefile est un peu plus indigeste que 3 lignes de commandes, je suis un peu à côté de mes pompes.

    voici les 3 lignes de commandes extraites du makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gcc -Wall `pkg-config gtk+-3.0 --cflags` -I/usr/include/gtk-3.0 -c callbacks.c -o callbacks.o
    gcc -Wall `pkg-config gtk+-3.0 --cflags` -I/usr/include/gtk-3.0 -c main.c -o main.o
    g++ -o ohm callbacks.o main.o `pkg-config gtk+-3.0 --libs`

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    Par défaut
    Citation Envoyé par titux Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o ohm callbacks.o main.o `pkg-config gtk+-3.0 --libs`
    g++...
    Jamais joué avec cette bestiole.
    Néanmoins, et en attendant que des spécialistes répondent, en faisant g++ --help on peut lire (extrait, presque à la fin de la sortie) :
    -shared Create a shared library.

    Et donc si cette option était active par défaut, ça serait peut-être ton problème ?
    Le souci c'est que la commande qui permet de voir ça (à défaut de la comprendre) renvoie des infos pour le moins ésotériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # g++ -dumpspecs | grep shared
    %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}    %{mpc32:crtprec32.o%s}    %{mpc64:crtprec64.o%s}    %{mpc80:crtprec80.o%s}    %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s
    %{!r:--build-id} --no-add-needed %{!static:--eh-frame-hdr} %{m64:-m elf_x86_64}                    %{m64|mx32:;:-m elf_i386}                    %{mx32:-m elf32_x86_64}   --hash-style=both   %{shared:-shared}   %{!shared:     %{!static:       %{rdynamic:-export-dynamic}       %{m64|mx32:;:-dynamic-linker %{muclibc:/lib/ld-uClibc.so.0;:%{mbionic:/system/bin/linker;:/lib/ld-linux.so.2}}}       %{m64:-dynamic-linker %{muclibc:/lib/ld64-uClibc.so.0;:%{mbionic:/system/bin/linker64;:/lib64/ld-linux-x86-64.so.2}}}       %{mx32:-dynamic-linker %{muclibc:/lib/ldx32-uClibc.so.0;:%{mbionic:/system/bin/linkerx32;:/libx32/ld-linux-x32.so.2}}}}     %{static:-static}}
    %{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}
    %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared-libgcc:-lgcc --as-needed -lgcc_s --no-as-needed}%{shared-libgcc:-lgcc_s%{!shared: -lgcc}}}}
    %{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}    crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}
    Ouch !
    À toi le plaisir pour t'y retrouver là-dedans

    Ou alors utilise gcc pour assembler tes .o.

  13. #13
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    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.

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

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