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

Bibliothèques Discussion :

[Libjpeg] pb de link avec gcc/g++


Sujet :

Bibliothèques

  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut [Libjpeg] pb de link avec gcc/g++
    Bonjour tout le monde !
    J'essaie d'implémenter un algo très simple de décompression utilisant la libjpeg sous Linux. J'avoue ne pas comprendre, elle est installée, si je compile avec -c (pas de link), ça tourne, j'ai mon .o si je fais direct, j'ai ceci :
    gcc test_jpeg.cpp -O3 -g -ljpeg -o test_jpeg.o
    /home/jm/tmp/cclDtFad.o: In function `loadJpegImage(char*)':
    /home/jm/C++/test_jpeg.cpp:25: undefined reference to `jpeg_std_error(jpeg_error_mgr*)'
    /home/jm/C++/test_jpeg.cpp:26: undefined reference to `jpeg_CreateDecompress(jpeg_decompress_struct*, int, unsigned int)'
    /home/jm/C++/test_jpeg.cpp:32: undefined reference to `jpeg_stdio_src(jpeg_decompress_struct*, _IO_FILE*)'
    /home/jm/C++/test_jpeg.cpp:33: undefined reference to `jpeg_read_header(jpeg_decompress_struct*, int)'
    /home/jm/C++/test_jpeg.cpp:44: undefined reference to `jpeg_start_decompress(jpeg_decompress_struct*)'
    /home/jm/C++/test_jpeg.cpp:51: undefined reference to `jpeg_finish_decompress(jpeg_decompress_struct*)'
    /home/jm/C++/test_jpeg.cpp:52: undefined reference to `jpeg_destroy_decompress(jpeg_decompress_struct*)'
    /home/jm/C++/test_jpeg.cpp:49: undefined reference to `jpeg_read_scanlines(jpeg_decompress_struct*, unsigned char**, unsigned int)'
    /home/jm/tmp/cclDtFad.o.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    J'ai tout copié/collé, c'est plus simple .
    La commande est en gras.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <jpeglib.h>
    #include <jerror.h>
     
    unsigned char image[256*256*3];
    unsigned char texture[256][256][3];
     
    void loadJpegImage(char *fichier);
     
    int main(int argc,char **argv) {
     
    	loadJpegImage("lena.jpg");
     
    }
     
    void loadJpegImage(char *fichier)
    {
      struct jpeg_decompress_struct cinfo;
      struct jpeg_error_mgr jerr;
      FILE *file;	
      unsigned char *ligne;
      int i,j,width=512,height=512;
     
      cinfo.err = jpeg_std_error(&jerr);
      jpeg_create_decompress(&cinfo);
      if ((file=fopen(fichier,"rb"))==NULL)
        {
          fprintf(stderr,"Erreur : impossible d'ouvrir le fichier texture.jpg\n");
          exit(1);
        }
      jpeg_stdio_src(&cinfo, file);
      jpeg_read_header(&cinfo, TRUE);
     
      if ((cinfo.image_width!=256)||(cinfo.image_height!=256)) {
        fprintf(stdout,"Erreur : l'image doit etre de taille 256x256\n");
        exit(1);
      }
      if (cinfo.jpeg_color_space==JCS_GRAYSCALE) {
        fprintf(stdout,"Erreur : l'image doit etre de type RGB\n");
        exit(1);
      }
     
      jpeg_start_decompress(&cinfo);
      ligne=image;
      while (cinfo.output_scanline<cinfo.output_height)
        {
          ligne=image+3*256*cinfo.output_scanline;
          jpeg_read_scanlines(&cinfo,&ligne,1);
        }
      jpeg_finish_decompress(&cinfo);
      jpeg_destroy_decompress(&cinfo);
     
      for (i=0;i<width;i++)
        for (j=0;j<height;j++) {
          texture[i][j][0]=image[i*256*3+j*3];
          texture[i][j][1]=image[i*256*3+j*3+1];
          texture[i][j][2]=image[i*256*3+j*3+2];
        }
    }

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pour compiler du C++, c'est g++. Enfin vu ton code, ce serait plutôt le fichier qu'il faudrait renommer en .c

    Ceci-dit je ne sais pas si ça réglera tes erreurs d'édition de liens.

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Oui, enfin, là c'était gcc, mais avec g++ c'est tout pareil !
    Et les libs sont en .h de toute manière.
    Par contre, je ne pense pas que celà change quoi que ce soit au niveau liens...
    Je vais tenter bien sûr .
    Mais je veux bien d'autres solutions !

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK, j'ai rien dit, bien vu, c'est du C.
    Gcc m'a compilé ça sans soucis.
    Encore merci, j'ai pas réfléchi

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Par défaut
    J'aimerais reprendre le sujet car j'ai aussi besoin d'utiliser cette fonction dans un projet et lorsque je compile avec gcc j'obtiens ces erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /tmp/ccsaVXYb.o: In function `loadJpegImage':
    jpeg.c:(.text+0x63): undefined reference to `jpeg_std_error'
    jpeg.c:(.text+0x87): undefined reference to `jpeg_CreateDecompress'
    jpeg.c:(.text+0xf5): undefined reference to `jpeg_stdio_src'
    jpeg.c:(.text+0x10b): undefined reference to `jpeg_read_header'
    jpeg.c:(.text+0x1a0): undefined reference to `jpeg_start_decompress'
    jpeg.c:(.text+0x1e6): undefined reference to `jpeg_read_scanlines'
    jpeg.c:(.text+0x204): undefined reference to `jpeg_finish_decompress'
    jpeg.c:(.text+0x212): undefined reference to `jpeg_destroy_decompress'
    Y a-t-il quelque une option supplémentaire à ajouter dans la ligne de compilation ? je ne fais que pour le moment.

  6. #6
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    Salut un peu tardivement désolé, j'ai eu un soucis similaire, il te faut enclosed tes includes vers la libjpeg à partir de ton code c++ en incluant la jpeglib d'un extern "C" car ton code est du C++ / appels en C (le groupe jpeg n a pas envisagé le cas (utilisation de la V6b & V7 ok).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //To use jpeg library in C++ code
     
    #ifdef __cplusplus 
      extern "C"
      {
    #endif
     
    #include <jpeglib.h>
     
    #ifdef __cplusplus
    }
    #endif
    ...

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

Discussions similaires

  1. [SDL 2.0] Compilation avec gcc (mingw) , erreur de link?
    Par Devprek dans le forum SDL
    Réponses: 3
    Dernier message: 10/02/2015, 10h02
  2. Erreur de link avec Gcc + QThread
    Par uriotcea dans le forum Débuter
    Réponses: 1
    Dernier message: 22/05/2008, 15h13
  3. pb de link avec direct X 8.1
    Par amaury pouly dans le forum DirectX
    Réponses: 2
    Dernier message: 01/04/2003, 08h04
  4. les .a avec gcc
    Par Groove dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 31/03/2003, 07h59
  5. getch() avec gcc
    Par Jorus dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/12/2002, 14h47

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