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. #1
    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 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 ?
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  2. #2
    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
    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.
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    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...
    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

  4. #4
    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
    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
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    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.
    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

  6. #6
    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
    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`
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    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.
    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

  8. #8
    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
    Pourquoi compiler avec gcc et linker avec g++ ?

    Que donne une création en une ligne avec gcc ?

  9. #9
    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
    Pourquoi compiler avec gcc et linker avec g++ ?
    je sais pas trop d'où vient g++, j'ai utilisé une moulinette cbp2make pour convertir le projet .cbp en makefile

    la compilation en 1 ligne même si je ne sais pas trop ce que tu entends par là, j'ai tenté ça :

    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  main.c callbacks.c -o ohm -lm
    le résultat est le même bibliothèque partagée

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

  10. #10
    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
    que retournent les commandes pkg-config gtk+-3.0 --cflags et pkg-config gtk+-3.0 --libs?
    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

  11. #11
    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
    bonjour,

    pkg-config gtk+-3.0 --cflags retourne :
    (mis en forme pour un peu de clareté)
    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
    -pthread 
    -I/usr/include/gtk-3.0 
    -I/usr/include/at-spi2-atk/2.0 
    -I/usr/include/at-spi-2.0 
    -I/usr/include/dbus-1.0 
    -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include 
    -I/usr/include/gtk-3.0 
    -I/usr/include/gio-unix-2.0/ 
    -I/usr/include/cairo 
    -I/usr/include/pango-1.0 
    -I/usr/include/harfbuzz 
    -I/usr/include/pango-1.0 
    -I/usr/include/atk-1.0 
    -I/usr/include/cairo 
    -I/usr/include/pixman-1 
    -I/usr/include/freetype2 
    -I/usr/include/libpng16 
    -I/usr/include/gdk-pixbuf-2.0 
    -I/usr/include/libpng16 
    -I/usr/include/glib-2.0 
    -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
    pkg-config gtk+-3.0 --libs retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  12. #12
    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 suis loin d'être un expert en commande de compilation, mais à tout hasard j'ai tenté ça :

    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
    $ ld -o ohm callbacks.o main.o `pkg-config gtk+-3.0 --libs` -lm -lc
    la dernière ligne me retourne cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ld*: avertissement*: le symbole d'entrée _start est introuvable*; utilise par défaut 0000000000401ef0
    ça me génère bien un exécutable mais qu'on ne peut exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./ohm 
    bash: ./ohm: Aucun fichier ou dossier de ce type
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  13. #13
    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
    il n'y a pas de fonction main valide.
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par titux Voir le message
    (mis en forme pour un peu de clareté)
    Clarté sans "e", par pitié !

    Citation Envoyé par titux Voir le message
    je suis loin d'être un expert en commande de compilation, mais à tout hasard j'ai tenté ça :
    Avec le hasard, en général on va dans le mur !

    Pourquoi ne tentes-tu pas tout simplement gcc -Wall `pkg-config gtk+-3.0 --cflags` -I/usr/include/gtk-3.0 callbacks.c main.c -o ohm, comme expliqué ici ?

    Citation Envoyé par titux Voir le message
    ça me génère bien un exécutable mais qu'on ne peut exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./ohm 
    bash: ./ohm: Aucun fichier ou dossier de ce type
    Et quand le machin te dit qu'il ne trouve pas le fichier, ça nous fait une belle jambe si tu ne nous donnes pas aussi et surtout le contenu du dossier avec ls -Al par exemple.
    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

  15. #15
    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 ce niveau là, on veut bien aussi voir le code, y compris le "callbacks.h" qui doit exister.
    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

  16. #16
    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 Jipété Voir le message
    Et quand le machin te dit qu'il ne trouve pas le fichier, ça nous fait une belle jambe si tu ne nous donnes pas aussi et surtout le contenu du dossier avec ls -Al par exemple.
    Faut pas pousser :
    ça me génère bien un exécutable mais qu'on ne peut exécuter
    Le bonhomme n'a pas l'air débile donc on peut espérer que le fichier existe vraiment.

    Quant à ton:
    comme expliqué ici ?
    alors que le lien ne parle pas de pkg-config, ne serais-tu pas, toi aussi, en train d'aller dans le mur, par hasard ?

  17. #17
    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 testé aussi en recompilant un projet d'il y a 1 ou 2 ans sous codeblocks avec le même résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ld -o ohm
    ld*: aucun fichier d'entrée
    le résultat du ls -Al après avoir compilé avec
    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 -lc
    :
    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
    $ ls -Al
    total 716
    drwxr-xr-x 4 antoine antoine   4096 juil. 18 12:51 bin
    -rw-r--r-- 1 antoine antoine  19083 juil. 19 12:18 callbacks.c
    -rw-r--r-- 1 antoine antoine   1021 juil. 19 12:12 callbacks.h
    -rw-r--r-- 1 antoine antoine  27312 juil. 19 11:57 callbacks.o
    -rwxr-xr-x 1 antoine antoine 470200 juin   9  2013 cbp2make
    -rw-r--r-- 1 antoine antoine   6086 juil. 13 19:32 code-couleur-resistance.png
    drwxr-xr-x 3 antoine antoine   4096 juil. 17 11:03 Debug
    -rw-r--r-- 1 antoine antoine   3591 juil. 19 12:18 main.c
    -rw-r--r-- 1 antoine antoine   9872 juil. 19 11:57 main.o
    -rw-r--r-- 1 antoine antoine   2566 juil. 18 12:59 Makefile
    drwxr-xr-x 4 antoine antoine   4096 juil. 18 12:51 obj
    -rwxr-xr-x 1 antoine antoine  34496 juil. 19 13:15 ohm
    -rw-r--r-- 1 antoine antoine   1484 juil. 18 20:42 ohm.cbp
    -rw-r--r-- 1 antoine antoine 101727 juil. 19 12:14 ohm.depend
    -rw-r--r-- 1 antoine antoine    731 juil. 19 12:19 ohm.layout
    -rw-r--r-- 1 antoine antoine   6565 juil. 16 19:35 ohm.zip
    drwxr-xr-x 3 antoine antoine   4096 juil. 17 10:53 Release
    -rw-r--r-- 1 antoine antoine   7266 juil. 13 21:55 tableau-serie-resistance.gif
    le main.c
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
    #include "callbacks.h"
     
    GtkWidget *combo1 = NULL;
    GtkWidget *combo2 = NULL;
    GtkWidget *combo3 = NULL;
    GtkWidget *combo4 = NULL;
    GtkWidget *combo5 = NULL;
     
    GtkWidget *win = NULL;
    GtkWidget *hbox4 = NULL;
    GtkWidget *hbox5 = NULL;
    GtkWidget *vbox4 = NULL;
    GtkWidget *vbox5 = NULL;
    GtkWidget *output4 = NULL;
     
    GtkWidget *comboValue;
    GtkWidget *comboTolerance;
    GtkWidget *notebook;
    GtkWidget *tab4;
    GtkWidget *tab5;
    GtkWidget *resistor;
    GtkWidget *E12Label;
     
     
    int main (int argc, char *argv[])
    {
     
        /* Initialize GTK+ */
    //    g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
        gtk_init (&argc, &argv);
    //    g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
     
        /* Create the main window */
        win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_container_set_border_width (GTK_CONTAINER (win), 8);
        gtk_window_set_title (GTK_WINDOW (win), "Code Couleur");
        gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
        gtk_widget_set_size_request( win, 400, 200);
        gtk_window_set_resizable(GTK_WINDOW (win), FALSE);
        gtk_widget_realize (win);
        g_signal_connect (win, "destroy", gtk_main_quit, NULL);
     
     
        vbox4 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
     
        tab4 = gtk_label_new ("Calculateur");
        notebook = gtk_notebook_new ();
        gtk_notebook_insert_page (GTK_NOTEBOOK(notebook), GTK_WIDGET(vbox4), GTK_WIDGET(tab4), 0);
     
        /* Create a vertical box with buttons */
        gtk_container_add (GTK_CONTAINER (win), notebook);
     
        hbox4 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
        gtk_container_add (GTK_CONTAINER (vbox4), hbox4);
     
        combo1 = fillValueCombo(combo1, SIGNIFICATIFS);
        gtk_box_pack_start (GTK_BOX (hbox4), combo1, TRUE, TRUE, 3);
     
        combo2 = fillValueCombo(combo2, SIGNIFICATIFS);
        gtk_box_pack_start (GTK_BOX (hbox4), combo2, TRUE, TRUE, 3);
     
        combo3 = fillValueCombo(combo3, MULTIPLICATEUR);
        gtk_box_pack_start (GTK_BOX (hbox4), combo3, TRUE, TRUE, 3);
     
        combo5 = fillToleranceCombo(combo5);
        gtk_box_pack_start (GTK_BOX (hbox4), combo5, TRUE, TRUE, 3);
     
        resistor = gtk_drawing_area_new ();
        gtk_box_pack_start (GTK_BOX (vbox4), resistor, TRUE, TRUE, 3);
     
        output4 = gtk_entry_new();
        gtk_entry_set_alignment ( (GtkEntry *)output4, 0.5);
        gtk_box_pack_start (GTK_BOX (vbox4), output4, TRUE, TRUE, 3);
     
     
        g_signal_connect (combo1, "changed", G_CALLBACK (valueSelected4Rings), NULL);
        g_signal_connect (combo2, "changed", G_CALLBACK (valueSelected4Rings), NULL);
        g_signal_connect (combo3, "changed", G_CALLBACK (valueSelected4Rings), NULL);
        g_signal_connect (combo5, "changed", G_CALLBACK (valueSelected4Rings), NULL);
     
        g_signal_connect (output4, "activate", G_CALLBACK (inputValue), NULL);
        g_signal_connect (notebook, "change-current-page", G_CALLBACK (redraw), NULL);
        g_signal_connect (G_OBJECT(resistor), "draw", G_CALLBACK (draw), NULL);
        g_signal_connect (G_OBJECT(resistor), "configure-event", G_CALLBACK (configure), NULL);
     
     
     
        vbox5 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
        tab5 = gtk_label_new ("Valeurs courantes");
        gtk_notebook_insert_page (GTK_NOTEBOOK(notebook), GTK_WIDGET(vbox5), GTK_WIDGET(tab5), 1);
     
        E12Label = gtk_label_new ("Série E12 par multiples de 10 :\n\n100   120   150   180   220   270   330   390   470   560   680   820");
        gtk_box_pack_start (GTK_BOX (vbox5), E12Label, TRUE, TRUE, 3);
     
        /* Enter the main loop */
        gtk_widget_show_all (win);
        gtk_main ();
        return 0;
    }
    callbacks.h
    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
    #ifndef CALLBACKS_H_INCLUDED
    #define CALLBACKS_H_INCLUDED
     
     
    #define SIGNIFICATIFS   10
    #define MULTIPLICATEUR  8
     
    #include <gtk/gtk.h>
     
    typedef struct {
     
        double red;
        double green;
        double blue;
    }Color;
     
    Color ColorRing1;
    Color ColorRing2;
    Color ColorRing3;
    Color ColorRing4;
     
     
     
    GtkWidget *fillValueCombo( GtkWidget *combo, int limit );
     
    GtkWidget *fillToleranceCombo( GtkWidget *combo );
     
    void getDizaine();
     
    void getUnite();
     
    void getMultiple();
     
    void getTolerance( char *str );
     
    void insertSpace( char *value );
     
    void valueSelected4Rings( void );
     
    void redraw();
     
    gboolean draw (GtkWidget *widget, cairo_t *cr, gpointer data);
     
    gboolean configure (GtkWidget *widget, GdkEventConfigure *event, gpointer data);
     
    void clear_surface (void);
     
    void drawResistor( Color *color1, Color *color2, Color *color3, Color *color4 );
     
    void ColorSelect(   int *dizaine, int *unite, long *multiple, int *tolerance,
                        Color *color1, Color *color2, Color *color3, Color *color4 );
     
    void inputValue();
     
    #endif
    callbacks.c
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
     
    #include <math.h>
    #include <gdk/gdk.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include "callbacks.h"
     
     
    extern GtkWidget *combo1;
    extern GtkWidget *combo2;
    extern GtkWidget *combo3;
    extern GtkWidget *combo4;
    extern GtkWidget *combo5;
    extern GtkWidget *output4;
    extern GtkWidget *notebook;
    extern GtkWidget *resistor;
     
    GtkListStore *valueListStore;
    GtkListStore *toleranceListStore;
    GtkCellRenderer *column;
     
    int valeur_unite = 0;
    int valeur_dizaine = 0;
    long valeur_multiple = 0;
    int tolerance = 0;
     
    char valeur[32];
     
    cairo_surface_t *surface;
     
    GtkWidget *fillValueCombo( GtkWidget *combo, int limit )
    {
     
        valueListStore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "white",
                                          1, "black",
                                          2, "     -",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "black",
                                          1, "white",
                                          2, "Noir",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "brown",
                                          1, "white",
                                          2, "Marron",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "red",
                                          1, "black",
                                          2, "Rouge",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "orange",
                                          1, "black",
                                          2, "Orange",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "yellow",
                                          1, "black",
                                          2, "Jaune",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "green",
                                          1, "black",
                                          2, "Vert",
                                          -1);
        if( limit == SIGNIFICATIFS ){
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "blue",
                                          1, "white",
                                          2, "Bleu",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "purple",
                                          1, "white",
                                          2, "Violet",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "grey",
                                          1, "black",
                                          2, "Gris",
                                          -1);
        gtk_list_store_insert_with_values(valueListStore, NULL, -1,
                                          0, "white",
                                          1, "black",
                                          2, "Blanc",
                                          -1);
        }
     
        combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(valueListStore));
     
        /* valueListStore is now owned by combo, so the initial reference can
         * be dropped */
        g_object_unref(valueListStore);
     
        column = gtk_cell_renderer_text_new();
        gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE);
     
        /* column does not need to be g_object_unref()ed because it
         * is GInitiallyUnowned and the floating reference has been
         * passed to combo by the gtk_cell_layout_pack_start() call. */
     
        gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column,
                                       "cell-background", 0,
                                       "foreground", 1,
                                       "text", 2,
                                       NULL);
     
        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
     
        return combo;
    }
     
    GtkWidget *fillToleranceCombo( GtkWidget *combo )
    {
     
        toleranceListStore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "white",
                                          1, "black",
                                          2, "     -",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "grey",
                                          1, "black",
                                          2, "Argent",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "yellow",
                                          1, "black",
                                          2, "Or",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "brown",
                                          1, "white",
                                          2, "Marron",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "red",
                                          1, "black",
                                          2, "Rouge",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "green",
                                          1, "black",
                                          2, "Vert",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "blue",
                                          1, "white",
                                          2, "Bleu",
                                          -1);
     
        gtk_list_store_insert_with_values(toleranceListStore, NULL, -1,
                                          0, "purple",
                                          1, "white",
                                          2, "Violet",
                                          -1);
     
     
     
        combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(toleranceListStore));
     
        /* valueListStore is now owned by combo, so the initial reference can
         * be dropped */
        g_object_unref(toleranceListStore);
     
        column = gtk_cell_renderer_text_new();
        gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), column, TRUE);
     
        /* column does not need to be g_object_unref()ed because it
         * is GInitiallyUnowned and the floating reference has been
         * passed to combo by the gtk_cell_layout_pack_start() call. */
     
        gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), column,
                                       "cell-background", 0,
                                       "foreground", 1,
                                       "text", 2,
                                       NULL);
     
        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
     
        return combo;
    }
     
    void getDizaine(){
     
        valeur_dizaine = gtk_combo_box_get_active( (GtkComboBox *)combo1 );
     
        if( valeur_dizaine > 0 ) valeur_dizaine -=1;
        else valeur_dizaine = 0;
     
        sprintf(valeur, "%d", valeur_dizaine);
     
    }
     
    void getUnite(){
     
        valeur_unite = gtk_combo_box_get_active( (GtkComboBox *)combo2 );
     
        if( valeur_unite > 0 ) valeur_unite -=1;
        else valeur_unite = 0;
     
        if(valeur_dizaine > 0)
            sprintf(valeur, "%d", valeur_dizaine*10 + valeur_unite);
        else
            sprintf(valeur, "%d", valeur_unite);
    }
     
    void getMultiple(){
     
        valeur_multiple = gtk_combo_box_get_active( (GtkComboBox *)combo3 );
     
        if( valeur_multiple > 0 ) valeur_multiple -=1;
     
        valeur_multiple = pow( 10, valeur_multiple);
     
    }
     
    void getTolerance( char *str ){
     
        tolerance = gtk_combo_box_get_active( (GtkComboBox *)combo5 );
     
        switch(tolerance){
     
            case 1: sprintf(str, "%s", "   10%"); break;
            case 2: sprintf(str, "%s", "   5%"); break;
            case 3: sprintf(str, "%s", "   1%"); break;
            case 4: sprintf(str, "%s", "   2%"); break;
            case 5: sprintf(str, "%s", "   0.5%"); break;
            case 6: sprintf(str, "%s", "   0.25%"); break;
            case 7: sprintf(str, "%s", "   0.1%"); break;
     
            default : sprintf(str, "%s", ""); break;
        }
    }
     
    void insertSpace( char *value ){
     
        int i = 0;
        char str[8];
     
     
        for(i=strlen(value); i>0; i--){
     
     
            if(i == (strlen(value)-7) ){
     
                strncpy(str, value+strlen(value)-7, 7);
                str[7] = '\0';
                value[strlen(value)-7] = ' ';
                strncpy(value+strlen(value)-6, str, 7);
            }
     
            if(i == (strlen(value)-3) ){
     
                strncpy(str, value+strlen(value)-3, 3);
                str[3] = '\0';
                value[strlen(value)-3] = ' ';
                strncpy(value+strlen(value)-2, str, 3);
            }
        }
    }
     
    void valueSelected4Rings( void ){
     
        char tol[8] = {""};
        long tmp = 0;
     
        memset(valeur, 0, 16);
     
        getDizaine();
        getUnite();
        getMultiple();
     
        tmp = ( valeur_dizaine*10 + valeur_unite) * valeur_multiple;
     
        sprintf(valeur, "%ld", tmp );
     
        insertSpace(valeur);
     
        getTolerance(tol);
     
        if(strlen(tol) > 1){
            strcat(valeur, " ");
            strcat(valeur, tol );
        }
     
        gtk_entry_set_text ((GtkEntry *)output4, valeur);
     
        ColorSelect( &valeur_dizaine, &valeur_unite, &valeur_multiple, &tolerance, &ColorRing1, &ColorRing2, &ColorRing3, &ColorRing4 );
     
        drawResistor( &ColorRing1, &ColorRing2, &ColorRing3, &ColorRing4 );
    }
     
    void redraw(){
     
        if( gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook)) == 1 ){
     
            gtk_widget_set_visible(GTK_WIDGET(combo4), TRUE);
        }
    }
     
    gboolean draw (GtkWidget *widget, cairo_t *cr, gpointer data)
    {
        cairo_set_source_surface (cr, surface, 0, 0);
        cairo_paint (cr);
        drawResistor( &ColorRing1, &ColorRing2, &ColorRing3, &ColorRing4 );
      return FALSE;
    }
     
    gboolean
    configure (GtkWidget         *widget,
                        GdkEventConfigure *event,
                        gpointer           data)
    {
        if (surface) cairo_surface_destroy (surface);
     
        surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
                                           CAIRO_CONTENT_COLOR,
                                           gtk_widget_get_allocated_width (widget),
                                           gtk_widget_get_allocated_height (widget));
     
        /* Initialize the surface to white */
        clear_surface ();
     
        /* We've handled the configure event, no need for further processing. */
        return TRUE;
    }
     
    void
    clear_surface (void)
    {
        cairo_t *cr;
     
        cr = cairo_create (surface);
     
        cairo_set_source_rgb (cr, 1, 1, 1);
        cairo_paint (cr);
     
        cairo_fill (cr);
        cairo_destroy (cr);
    }
     
    void drawResistor( Color *color1, Color *color2, Color *color3, Color *color4 ){
     
        cairo_t *cr;
     
        clear_surface();
     
        cr = cairo_create (surface);
     
     
        int width = gtk_widget_get_allocated_width (resistor);
        int height = gtk_widget_get_allocated_height (resistor);
     
        cairo_arc (cr, (double)3*width/7 - height/4 +2, (double)height/2, height/3, 50.0  * (M_PI/180.0), -50.0  * (M_PI/180.0));
        cairo_stroke (cr);
     
        cairo_arc (cr, (double)4*width/7 + height/4 -2, (double)height/2, height/3, -130.0  * (M_PI/180.0), 130.0  * (M_PI/180.0));
        cairo_stroke (cr);
     
        cairo_rectangle (cr, (double)6*width/14, (double)height/4, (double)height/5, (double)height/2);
        cairo_set_source_rgb (cr, color1->red, color1->green, color1->blue );
        cairo_fill_preserve (cr);
     
        if( valeur_dizaine == 9 ){
            cairo_set_source_rgb (cr, 0.0, 0.0, 0.0 );
        }
        cairo_stroke (cr);
     
        cairo_rectangle (cr, (double)7*width/15, (double)height/4, (double)height/5, (double)height/2);
        cairo_set_source_rgb (cr, color2->red, color2->green, color2->blue );
        cairo_fill_preserve (cr);
     
        if( valeur_unite == 9 ){
            cairo_set_source_rgb (cr, 0.0, 0.0, 0.0 );
        }
        cairo_stroke (cr);
     
        cairo_rectangle (cr, (double)7*width/14+2, (double)height/4, (double)height/5, (double)height/2);
        cairo_set_source_rgb (cr, color3->red, color3->green, color3->blue );
        cairo_fill(cr);
     
        cairo_rectangle (cr, (double)8*width/14 - height/4, (double)height/4, (double)height/5, (double)height/2);
        cairo_set_source_rgb (cr, color4->red, color4->green, color4->blue );
        cairo_fill(cr);
     
     
        cairo_set_source_rgb (cr, 0, 0, 0);
     
        cairo_move_to(cr, (double)3*width/7, (double)height/4);
        cairo_line_to (cr, (double)4*width/7, (double)height/4);
     
        cairo_move_to(cr, (double)3*width/7, (double)3*height/4);
        cairo_line_to (cr, (double)4*width/7, (double)3*height/4);
     
        cairo_move_to(cr, (double)3*width/7 - height/4 +2 -height/3, (double)height/2);
        cairo_line_to (cr, (double)width/4, (double)height/2);
     
        cairo_move_to(cr, (double)4*width/7 + height/4 -2 + height/3, (double)height/2);
        cairo_line_to (cr, (double)3*width/4, (double)height/2);
     
        cairo_set_line_width (cr, 2.0);
        cairo_stroke (cr);
        cairo_destroy (cr);
     
        gtk_widget_queue_draw_area (resistor,
                                    0,
                                    0,
                                    width,
                                    height);
     
    }
     
    void ColorSelect(   int *diz, int *unite, long *multiple, int *tolerance,
                        Color *color1, Color *color2, Color *color3, Color *color4 ){
     
        switch( *diz ){
     
            case 0 : color1->red = 0;   color1->green = 0;      color1->blue = 0;   break;
     
            case 1 : color1->red = 0.64; color1->green = 0.16;     color1->blue = 0.16;  break;
     
            case 2 : color1->red = 1.0; color1->green = 0;      color1->blue = 0;   break;
     
            case 3 : color1->red = 1.0; color1->green = 0.64;    color1->blue = 0;   break;
     
            case 4 : color1->red = 1.0; color1->green = 1.0;    color1->blue = 0;   break;
     
            case 5 : color1->red = 0;   color1->green = 0.5;    color1->blue = 0;   break;
     
            case 6 : color1->red = 0;   color1->green = 0;      color1->blue = 1.0; break;
     
            case 7 : color1->red = 0.5; color1->green = 0;      color1->blue = 0.5; break;
     
            case 8 : color1->red = 0.5; color1->green = 0.5;    color1->blue = 0.5; break;
     
            case 9 : color1->red = 1.0; color1->green = 1.0;    color1->blue = 1.0; break;
     
     
            default : color1->red = 0;   color1->green = 0;      color1->blue = 0;   break;
     
        }
        switch( *unite ){
     
            case 0 : color2->red = 0;   color2->green = 0;      color2->blue = 0;   break;
     
            case 1 : color2->red = 0.64; color2->green = 0.16;     color2->blue = 0.16;  break;
     
            case 2 : color2->red = 1.0; color2->green = 0;      color2->blue = 0;   break;
     
            case 3 : color2->red = 1.0; color2->green = 0.64;    color2->blue = 0;   break;
     
            case 4 : color2->red = 1.0; color2->green = 1.0;    color2->blue = 0;   break;
     
            case 5 : color2->red = 0;   color2->green = 0.5;    color2->blue = 0;   break;
     
            case 6 : color2->red = 0;   color2->green = 0;      color2->blue = 1.0; break;
     
            case 7 : color2->red = 0.5; color2->green = 0;      color2->blue = 0.5; break;
     
            case 8 : color2->red = 0.5; color2->green = 0.5;    color2->blue = 0.5; break;
     
            case 9 : color2->red = 1.0; color2->green = 1.0;    color2->blue = 1.0; break;
     
     
            default : color2->red = 0;   color2->green = 0;      color2->blue = 0;   break;
     
        }
        switch( *multiple ){
     
            case 1 : color3->red = 0;   color3->green = 0;      color3->blue = 0;   break;
     
            case 10 : color3->red = 0.64; color3->green = 0.16;     color3->blue = 0.16;  break;
     
            case 100 : color3->red = 1.0; color3->green = 0;      color3->blue = 0;   break;
     
            case 1000 : color3->red = 1.0; color3->green = 0.64;    color3->blue = 0;   break;
     
            case 10000 : color3->red = 1.0; color3->green = 1.0;    color3->blue = 0;   break;
     
            case 100000 : color3->red = 0;   color3->green = 0.5;    color3->blue = 0;   break;
     
            case 1000000 : color3->red = 0;   color3->green = 0;      color3->blue = 1.0; break;
     
     
            default : color3->red = 0;   color3->green = 0;      color3->blue = 0;   break;
     
        }
        switch( *tolerance ){
     
            case 1 : color4->red = 0.5; color4->green = 0.5;    color4->blue = 0.5; break;
     
            case 2 : color4->red = 1.0; color4->green = 1.0;    color4->blue = 0;   break;
     
            case 3 : color4->red = 0.64; color4->green = 0.16;     color4->blue = 0.16;  break;
     
            case 4 : color4->red = 1.0; color4->green = 0;      color4->blue = 0;   break;
     
            case 5 : color4->red = 0.0; color4->green = 0.5;    color4->blue = 0;   break;
     
            case 6 : color4->red = 0;   color4->green = 0;      color4->blue = 1.0; break;
     
            case 7 : color4->red = 0.5; color4->green = 0;      color4->blue = 0.5; break;
     
     
            default : color4->red = 0;   color4->green = 0;      color4->blue = 0;   break;
     
        }
    }
     
    void inputValue(){
     
        int i = 0;
        int zeros =0;
        int inputLength = 0;
        char tol = 0;
        char input[32];
        char tmp[32];
        char *pourcent;
        char *espace;
     
        strcpy( input, gtk_entry_get_text( GTK_ENTRY(output4)));
        inputLength = strlen(input);
     
        gtk_entry_set_text( GTK_ENTRY(output4), "");
     
        if( ( pourcent = strchr( input, '%') ) != NULL ){
     
            if( ( espace = strrchr( input, ' ') ) != NULL ){
     
                if( strstr(input, " 10%") != NULL ) tol = 1;
                if( strstr(input, " 5%") != NULL ) tol = 2;
                if( strstr(input, " 1%") != NULL ) tol = 3;
                if( strstr(input, " 2%") != NULL ) tol = 4;
                if( strstr(input, " 0.5%") != NULL ) tol = 5;
                if( strstr(input, " 0.25%") != NULL ) tol = 6;
                if( strstr(input, " 0.1%") != NULL ) tol = 7;
     
                if(tol > 0 && tol < 8)
                    gtk_combo_box_set_active( (GtkComboBox *)combo5, tol );
            }
        }
     
        for(i=0; i<inputLength; i++ ){
     
            if( input[i] != 32 && ( i != 1 || i != 5 ) ){
     
                if( input[i] >= 48 && input[i] <= 57 ){
                    tmp[i] = input[i] - 48;
     
                    if(tmp[i] == 0) zeros++;
                }
                else{
                    memset(tmp, -1, 32);
                    memset(input, 0, 32);
                }
            }
        }
     
        if( tmp[0] != 0 && tmp[1] != 0 && zeros != 0){
            gtk_combo_box_set_active( (GtkComboBox *)combo1, tmp[0]+1 );
            gtk_combo_box_set_active( (GtkComboBox *)combo2, tmp[1]+1 );
            gtk_combo_box_set_active( (GtkComboBox *)combo3, zeros );
     
            gtk_entry_set_text( GTK_ENTRY(output4), input);
        }
    }
    merci
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par Bktero Voir le message
    alors que le lien ne parle pas de pkg-config, ne serais-tu pas, toi aussi, en train d'aller dans le mur, par hasard ?
    Je répondais surtout pour être raccord avec ta demande :
    Citation Envoyé par Bktero Voir le message
    Que donne une création en une ligne avec gcc ?

    Citation Envoyé par Bktero Voir le message
    Le bonhomme n'a pas l'air débile donc on peut espérer que le fichier existe vraiment.
    Je ne sais pas : je donne une ligne de commande, je la retrouve avec des options en plus, et cette histoire de bash qui ne trouve pas le fichier alors qu'on le voit bien dans le listing, c'est très suspect...
    'fin bon, j'dis ça j'dis rien, hein.
    Suis pas spécialiste de C ni de gcc, j'ai amorcé la pompe, je vous passe le relais.
    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

  19. #19
    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
    sans les options ajoutées à la commande je me retrouve avec des centaines de lignes telles que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wall `pkg-config gtk+-3.0 --cflags` -I/usr/include/gtk-3.0 callbacks.c main.c -o ohm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /tmp/cclXmCIQ.o*: Dans la fonction «*fillValueCombo*»*:
    callbacks.c:(.text+0x2a)*: référence indéfinie vers «*gtk_list_store_new*»
    callbacks.c:(.text+0x75)*: référence indéfinie vers «*gtk_list_store_insert_with_values*»
    callbacks.c:(.text+0xbd)*: référence indéfinie vers «*gtk_list_store_insert_with_values*»
    callbacks.c:(.text+0x105)*: référence indéfinie vers «*gtk_list_store_insert_with_values*»
    callbacks.c:(.text+0x14d)*: référence indéfinie vers «*gtk_list_store_insert_with_values*»
    callbacks.c:(.text+0x195)*: référence indéfinie vers «*gtk_list_store_insert_with_values*»
    /tmp/cclXmCIQ.o:callbacks.c:(.text+0x1dd)*: encore plus de références indéfinies suivent vers «*gtk_list_store_insert_with_values*»
    “La folie, c’est se comporter de la même manière et s’attendre à un résultat différent.” Albert E.

  20. #20
    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
    Normal, tu n'as pas les options d'édition des liens, donc le linker ne trouve pas la définition des symboles.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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