二维码生成工具qrencode的arm-linux移植

准备所需的源码包

  1. zlib-1.2.8.tar.gz (在我的虚拟机上编译1.2.3版本编不过,换了个版本神奇编过去了,可能和交叉编译链有关)
  2. libpng-1.2.12.tar.gz
  3. qrencode-3.4.4.tar.gz

编译依赖库zlib

  1. 设置交叉编译链环境变量export CC=arm-none-linux-gnueabi-gcc (根据自己开发板对应的交叉编译链填写)
  2. 配置configure文件,命令 ./configure -shared
  3. 开始编译make,安装make install
  4. 查看生成文件:
    /usr/local/include/zconf.h zlib.h
    /usr/local/lib/libz.so libz.so.1 libz.so.1.2.8

编译libpng库

  1. 设置环境变量,把需要的依赖库zlib包含进来
    export CPPFLAGS="-I/usr/local/include"
    export LDFLAGS="-L/usr/local/lib"
  2. 配置configure文件,./configure --host=arm-linux
  3. vim config.h,注释掉下面语句 (似乎部分交叉编译链不会出现以下语句)
#define malloc rpl_malloc
  1. 编译make,安装make install,成功生成
    /usr/local/lib/libpng12.so,libpng12.so.0,libpng12.so.0.12.0 (注意:libpng12.so和libpng12.so.0都是libpng12.so.0.12.0的软链接文件,将其下载到板子上有时会链接失败,需要重新创建)

编译qrencode

  1. 配置configure文件,输入命令 ./configure --host=arm-linux -prefix=/usr/local/qrencode-arm-linux
  2. vim Makefile,修改变量LIBS=-lz
  3. 编译make (如果在编译libpng时没有注释rpl_malloc,在这一步中会报错),成功编译后安装make install
  4. 在/usr/local/qrencode-arm-linux/bin生成qrencode

移植

  1. 将/usr/local/lib目录下的libpng12.so,libpng12.so.0,libpng12.so.0.12.0移植到板子上的/usr/lib下。
  2. 将/usr/local/qrencode-arm-linux/lib目录下的libqrencode.la,libqrencode.so,libqrencode.so.3,libqrencode.so.3.4.4移植到板子上的/usr/lib下 (注意:libqrencode.so和libqrencode.so.3都是libqrencode.so.3.4.4的软链接文件,将其下载到板子上有时会链接失败,需要重新创建)
  3. 将/usr/local/qrencode-arm-linux/bin下的qrencode移植到板子的/usr/bin下

测试

在板子上输入命令qrencode -s 6 -o qr.png http://www.baidu.com,运行正常就会生成文件名为qr.png的二维码,二维码内容为一串网址,-s 6为尺寸参数

常见问题

  1. 运行qrencode提示:no such file
    解决方法:一般这种情况是因为交叉编译链和芯片型号不匹配,最好用板子对配套的交叉编译链编译。
  2. 运行报错:编译qrencode时libpng的版本和开发板上的libpng版本不一致
    解决方法:经过研究是因为某些交叉编译链配置configure是没有找到正确的libpng12库,所以编译出来的qrencode和实际移植到板子上的libpng库版本不一致,解决方法设置export png_CFLAGS=-I/usr/local/include/libpng12export png_LIBS=-L/usr/local/lib -lpng12
  3. 运行qrencode提示没有libz.so.1,同样方法移植libz.so.1.2.8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值