undefined reference to `jpeg_std_error(jpeg_error_mgr*)

背景 linux + QT BMP图片转JPG

#include <jpeglib.h>


编译错误:


root@happy-virtual-machine:/home/happy/Lee/Detector2# make
arm-linux-g++ -Wl,-O1 -Wl,-rpath,/opt/qt-4.7.1/lib -o Detector2 main.o mainwindow.o osd.o thread_preview.o preview.o thread_encode.o encode.o rtp.o power.o upload.o moc_mainwindow.o moc_thread_encode.o moc_upload.o    -L/opt/qt-4.7.1/lib -lQtGui -L/usr/local/tslib/lib -L/opt/qt-4.7.1/lib -lQtNetwork -lQtCore -lpthread  
encode.o: In function `Bmp2Jpg(char const*, char const*, int, int)':
encode.cpp:(.text+0x5ac): undefined reference to `jpeg_std_error(jpeg_error_mgr*)'
encode.cpp:(.text+0x5cc): undefined reference to `jpeg_CreateCompress(jpeg_compress_struct*, int, unsigned int)'
encode.cpp:(.text+0x5f0): undefined reference to `jpeg_stdio_dest(jpeg_compress_struct*, _IO_FILE*)'
encode.cpp:(.text+0x610): undefined reference to `jpeg_set_defaults(jpeg_compress_struct*)'
encode.cpp:(.text+0x620): undefined reference to `jpeg_set_quality(jpeg_compress_struct*, int, int)'
encode.cpp:(.text+0x62c): undefined reference to `jpeg_start_compress(jpeg_compress_struct*, int)'
encode.cpp:(.text+0x6d4): undefined reference to `jpeg_write_scanlines(jpeg_compress_struct*, unsigned char**, unsigned int)'
encode.cpp:(.text+0x6dc): undefined reference to `jpeg_finish_compress(jpeg_compress_struct*)'
encode.cpp:(.text+0x738): undefined reference to `jpeg_destroy_compress(jpeg_compress_struct*)'
encode.cpp:(.text+0x7ec): undefined reference to `jpeg_write_scanlines(jpeg_compress_struct*, unsigned char**, unsigned int)'
encode.cpp:(.text+0x7f4): undefined reference to `jpeg_finish_compress(jpeg_compress_struct*)'
encode.cpp:(.text+0x850): undefined reference to `jpeg_destroy_compress(jpeg_compress_struct*)'
collect2: ld returned 1 exit status
make: *** [Detector2] 错误 1


修改

1、MakeFile

LIBS          = $(SUBLIBS)  -L/opt/qt-4.7.1/lib -lQtGui -L/usr/local/tslib/lib -L/opt/qt-4.7.1/lib -lQtNetwork -lQtCore -lpthread -ljpeg 

2、源文件:

extern "C" {
#include <jpeglib.h>
}
用extern "c" 把 jpeg 有关的头文件包含进来


`jpeg_compress_struct` 是 libjpeg 库中的一个结构体,它包含了压缩 JPEG 图像所需的所有参数和选项。该结构体的定义如下: ```c typedef struct jpeg_compress_struct { struct jpeg_error_mgr * err; /* 错误处理器 */ struct jpeg_memory_mgr * mem; /* 内存管理器 */ struct jpeg_destination_mgr * dest; /* 输出数据处理器 */ JDIMENSION image_width; /* 图像宽度 */ JDIMENSION image_height; /* 图像高度 */ int input_components; /* 输入图像的颜色分量数 */ J_COLOR_SPACE in_color_space; /* 输入图像的颜色空间 */ jpeg_component_info * comp_info; /* 颜色分量信息 */ JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; /* 量化表指针 */ JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; /* DC 熵编码表指针 */ JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; /* AC 熵编码表指针 */ UINT8 * script_space; /* 算法脚本空间 */ size_t script_space_size; /* 算法脚本空间大小 */ int num_scans; /* 扫描数 */ const jpeg_scan_info * scan_info; /* 扫描信息 */ BOOL raw_data_in; /* 是否为原始数据 */ BOOL arith_code; /* 是否使用算术编码 */ BOOL optimize_coding; /* 是否优化编码 */ int smoothing_factor; /* 平滑因子 */ J_DCT_METHOD dct_method; /* DCT 变换方法 */ int restart_interval; /* 重启间隔 */ int restart_in_rows; /* 以行数为重启间隔 */ J_BUF_MODE buffer_mode; /* 数据缓冲模式 */ J_COLOR_TRANSFORM color_transform; /* 颜色转换方法 */ BOOL progressive_mode; /* 是否为渐进式扫描 */ int max_h_samp_factor; /* 采样因子的最大水平值 */ int max_v_samp_factor; /* 采样因子的最大垂直值 */ JDIMENSION total_iMCU_rows; /* 图像的总 iMCU 行数 */ JSAMPLE * sample_range_limit; /* 量化范围限制器 */ /* 还有一些其他的成员,比较少用到 */ } jpeg_compress_struct; ``` 这个结构体中的各个成员变量用来描述压缩 JPEG 图像所需的各种信息,包括输入图像的宽度和高度、颜色空间、颜色分量的信息、量化表、熵编码表、算法脚本空间等等。在使用 libjpeg 库进行 JPEG 图像压缩时,需要创建一个 `jpeg_compress_struct` 结构体,并对其中的成员变量进行设置,然后再调用相应的函数进行压缩操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值