为DM6446交叉编译libjpeg v8b

libjpeg v8b已支持内存内位图的压缩和解压缩,在jpeglib.h中加入了函数jpeg_mem_srcjpeg_mem_dest,所以已不需要像使用v6b时修改代码。

假设你已安装好DM6446的编译环境,PATH环境变量也已经设好,可以正常使用arm_v5t_le-gcc。在IJG下载最新的libjpeg v8b,注意是下载Unix格式的jpegsrc.v8b.tar.gz,而不是Windows格式的jpegsr8b.zip,Windows格式的用不了。

1. 打开终端,切换到解压后的libjpeg路径。

$cd ./jpeg-8b

2. 设置环境变量

$export CC=arm_v5t_le-gcc
$export ARCH=arm

3. 编译

默认是静态库和动态库都编译的。如果你要使用动态库,那么还需要加入--prefix(指定.h等文件的安装路径)和--exec-prefix(指定动态库、静态库等文件的安装路径)。

$./configure --host=$ARCH-linux
$make

编译之后libjpeg.a和libjpeg.so都在隐藏目录jpeg-8b/.libs下。

4. 安装,如果要使用动态库,则执行此步。

#make install

5. 使用libjpeg静态库

因为montavista linux已自带libjpeg v6b了,我不想升级,所以打算用静态库。编译之后我将libjpeg.a复制到我的CODEC的app工程目录的lib目录下,为了以示区别,将其更名为libjpeg-8b.a,头文件需要jerror.h/jmorecfg.h/jpeglib.h。CODEC工程可参考<CE_INSTALL_DIR>/examples。

一开始我修改的是app下的package.bld。

但编译时没有通过,一大堆的错误提示:

package/cfg/bin/app...: undefined reference to 'jpeg_CreateCompress'
package/cfg/bin/app...: undefined reference to 'jpeg_stdio_dest'
package/cfg/bin/app...: undefined reference to 'jpeg_set_defaults'
...
package/cfg/bin/app...: undefined reference to 'jpeg_destroy_decompress'
collect2: ld returned 1 exit status

查阅了网上的资料后,发现问题在这:

# lnk470MV bin/app_remote.x470MV ...
/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc -g -L./lib -ljpeg-8b -o bin/app_remote... -lpthread -L/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/armv5tl-montavista-linuxeabi/lib

连接静态库的时候,-l不能在-o的前面,否则就会出现undefined reference的错误。 

于是恢复package.bld文件,改为修改user.bld,就解决问题了。

修改之后,编译内容变化如下:

# lnk470MV bin/app_remote.x470MV ...
/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc -g -o bin/app_remote... -L./lib -ljpeg-8b -lpthread -L/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/armv5tl-montavista-linuxeabi/lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值