[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 :
Citation:
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:
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];
}
} |