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

GTK+ avec C & C++ Discussion :

Librairies glib et gnet


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut Librairies glib et gnet
    Bonsoir tout le monde.

    J'essaie de compiler un programme écrit en C avec la librairie GNET et GLIB. Le programme ne comporte à priori aucune erreur puisqu'il provient des examples fournis avec la librairie GNET.

    J'ai installé tous les paquets nécessaires :
    libglib2.0-0 (version 2.12.4-2)
    libglib2.0-0-dbg
    libglib2.0-cil
    libglib2.0-dat (je ne sais pas si ces 3 derniers sont nécessaires, mais je les ai mis comme je n'étais pas sur de moi)
    libglib2.0-dev

    libgnet2.0-0 (version 2.0.7-1)
    libgnet-dev
    libgnetwork1.0-0
    libgnetwork1.0-dev

    Le problème est que je n'arrive pas à compiler.
    Au début, il me disait qu'il ne trouvait pas les hearders glib.h et gnet.h. En fait pour glib, j'avais dans /usr/include un dossier glib2.0 avec 3 headers (glib.h, glib-object.h et gmodule.h) et 2 dossiers dont 1 nommé glib contenant que des .h. Alors j'ai tout déplacé dans /usr/include. Pour l'erreur concernant gnet.h, j'ai remplacé dans le programme le include <gnet.h> par include <gnet2.0/gnet.h>. Maintenant quand je compile je reçois une liste de 15 km de long d'erreurs (erreurs dans les headers de glib).

    Est ce que j'ai bien installé tous les paquets nécessaires? N'y a-t-il pas par hasard une option de compilation à mettre avec GCC?

    J'espère avoir été clair et je vous remercie d'avance de vous intéresser à mon problème.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Rien à voir avec le C.

    Je déplace.

    Par contre oui il faut une option spéciale dans gcc pour ajouter les bibliothèques au linker (mais je sais plus quoi).

    Peut-etre d'autres paquets à installer aussi.

  3. #3
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Déplacer des fichiers installés par un paquet posera incontestablement des problèmes. Les paquets sont justement là pour tout installer là où il faut et configurer ce qui va bien.

    De plus copier les headers dans /usr/include n'est pas suffisant: souvent il faut reconstruire le cache avec ldconfig, en root. Voir man ldconfig.
    De manière générale ATTENTION aux manipulations en root.

    Un conseil: regardes ce que dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ pkg-config gnet --cflags --libs
    Puis remets tous les fichiers où ils étaient, désinstalles ces paquets, réinstalles-les, recompiles ton exemple, puis indiques-nous
    • les trois premières erreurs de compilation,
    • la commande de compilation,
    • et le code

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Un conseil: regardes ce que dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ pkg-config gnet --cflags --libs
    Package gnet was not found in the pkg-config search path.
    Perhaps you should add the directory containing `gnet.pc` to the PKG_CONFIG_PATH environment variable.
    No paclage 'gnet' found.

    Une fois avoir remis tous les fichiers où ils étaient puis avoir tout réinstallé, j'obtiens toujours le même message en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ pkg-config gnet --cflags --libs
    les trois premières erreurs de compilation
    In file included from echoclient.c:23:
    /usr/include/glib-2.0/glib.h:30:26 error: glib/galloca.h: No such file or directory
    /usr/include/glib-2.0/glib.h:31:25 error: glib/garray.h: No such file or directory
    /usr/include/glib-2.0/glib.h:32:30 error: glib/gasyncqueue.h: No such file or directory
    la commande de compilation,
    gcc -o client echoclient.c
    et le code
    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
    /* Echo client
     * Copyright (C) 2000-2001  David Helder
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     */
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*
    J'ai juste modifié ces 2 lignes du fichier original echoclient.c que l'on trouve dans le dossier examples (http://www.gnetlibrary.org/).
    #include "glib.h"
    #include "gnet.h"
    */
    #include <glib-2.0/glib.h>
    #include <gnet-2.0/gnet.h>
     
     
    int
    main(int argc, char** argv)
    {
      gchar* hostname;
      gint port;
      GInetAddr* addr;
      GTcpSocket* socket;
      GIOChannel* iochannel;
      GIOError error = G_IO_ERROR_NONE;
      gchar buffer[1024];
      guint n;
     
      gnet_init ();
     
      /* Parse args */
      if (argc != 3)
        {  
          g_print ("usage: %s <server> <port>\n", argv[0]);
          exit(EXIT_FAILURE);
        }
      hostname = argv[1];
      port = atoi(argv[2]);
     
      /* Create the address */
      addr = gnet_inetaddr_new (hostname, port);
      if (!addr)
        {
          fprintf (stderr, "Error: Name lookup for %s failed\n", hostname);
          exit (EXIT_FAILURE);
        }
     
      /* Create the socket */
      socket = gnet_tcp_socket_new (addr);
      gnet_inetaddr_delete (addr);
      if (!socket)
        {
          fprintf (stderr, "Error: Could not connect to %s:%d\n", hostname, port);
          exit (EXIT_FAILURE);
        }
     
    #if 0
      {
        gchar* cname;
     
        /* Print local address */
        addr = gnet_tcp_socket_get_local_inetaddr (socket);
        g_assert (addr);
        cname = gnet_inetaddr_get_canonical_name (addr);
        g_assert (cname);
        g_print ("Local address: %s:%d\n", cname, gnet_inetaddr_get_port(addr));
        g_free (cname);
        gnet_inetaddr_delete (addr);
     
        /* Print remote address */
        addr = gnet_tcp_socket_get_remote_inetaddr (socket);
        g_assert (addr);
        cname = gnet_inetaddr_get_canonical_name (addr);
        g_assert (cname);
        g_print ("Remote address: %s:%d\n", cname, gnet_inetaddr_get_port(addr));
        g_free (cname);
        gnet_inetaddr_delete (addr);
      }
    #endif
     
      /* Get the IOChannel */
      iochannel = gnet_tcp_socket_get_io_channel (socket);
      g_assert (iochannel != NULL);
     
      while (fgets(buffer, sizeof(buffer), stdin) != 0)
        {
          n = strlen(buffer);
          error = gnet_io_channel_writen (iochannel, buffer, n, &n);
          if (error != G_IO_ERROR_NONE) break;
     
          error = gnet_io_channel_readn (iochannel, buffer, n, &n);
          if (error != G_IO_ERROR_NONE) break;
     
          fwrite(buffer, n, 1, stdout);
        }
     
      if (error != G_IO_ERROR_NONE) 
        fprintf (stderr, "Error: IO error (%d)\n", error);
     
      gnet_tcp_socket_delete (socket);
     
      return 0;
    }

  5. #5
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    1) Pour la commande de compilation, regardes les exemples de la lib ils doivent
    avoir un makefile ou quelque chose expliqué dans la doc.

    2) Pour glib, soit tu installes le paquet proprement, soit tu télécharges la source
    et la recompile. Il placera les fichiers où il faut. Le but étant de faire #include <glib.h> pour se retrouver dans une configuration "standard". Voir #1.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Les paquets ont été installé proprement à priori vu que je suis passé par le gestionnaire de paquets synaptic.

    J'ai téléchargé les sources puis recompilé le tout. En faisant un make ça compile tous les fichiers situés dans le dossier example. Alors j'ai fouillé dans le makefile pour voir la ligne de commande et j'en ai déduis le script suivant pour compiler mon petit programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../src    -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -g -O2 -D_REENTRANT -DGNET_EXPERIMENTAL -Wall -Wstrict-prototypes     -Wmissing-prototypes -Wmissing-declarations -MT echoclient.o -MD -MP -MF ".deps/echoclient.Tpo" -c -o echoclient.o echoclient.c; \
    	then mv -f ".deps/echoclient.Tpo" ".deps/echoclient.Po"; else rm -f ".deps/echoclient.Tpo"; exit 1; fi
     
    /bin/sh ../libtool --mode=link gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -g -O2 -D_REENTRANT -DGNET_EXPERIMENTAL -Wall -Wstrict-prototypes     -Wmissing-prototypes -Wmissing-declarations   -o echoclient  echoclient.o ../src/libgnet-2.0.la -lresolv -lnsl  -pthread
    Bon c'est super cool ça marche mais je ne comprend absolument rien de tout ça, si je ne fais pas le if qui débouche sur le mv ... ça ne marche pas. N'y aurait-il pas moyen de faire plus simple??

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    pkg-config gnet --cflags --libs
    En fait c'est :
    pkg-config --cflags --libs gnet-2.0

    donc

    gcc -o client `pkg-config --cflags --libs gnet-2.0` echoclient.c

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    MERCI SCRIPTOFF!! Ta commande marche vraiment super bien!!!

    Est ce que tu pourrais juste me dire comment tu as fait pour trouver ça STP?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    tout les fichiers utilisés pas pkgconfig se trouve normalement dans /usr/lib/pkgconfig/


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ls /usr/lib/pkgconfig/gn*
    me donne :
    /usr/lib/pkgconfig/gnet-2.0.pc
    etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <glib-2.0/glib.h>
    #include <gnet-2.0/gnet.h>
    Inutile , tu peux mettre ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <glib.h>
    #include <gnet.h>
    et tu compile avec

    gcc -o echoclient `pkg-config --cflags --libs glib-2.0` `pkg-config --cflags --libs gnet-2.0` echoclient.c

Discussions similaires

  1. librairie Gnet ou Socket ?
    Par BbT0n dans le forum C
    Réponses: 3
    Dernier message: 26/08/2009, 20h30
  2. inclure une librairie *.lib
    Par darkbm dans le forum C
    Réponses: 2
    Dernier message: 16/12/2002, 22h48
  3. Réponses: 5
    Dernier message: 09/12/2002, 22h23
  4. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

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