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 :
J'ai tout copié/collé, c'est plus simplegcc 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.
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]; } }
Partager