准备所需的源码包
- zlib-1.2.8.tar.gz (在我的虚拟机上编译1.2.3版本编不过,换了个版本神奇编过去了,可能和交叉编译链有关)
- libpng-1.2.12.tar.gz
- qrencode-3.4.4.tar.gz
编译依赖库zlib
- 设置交叉编译链环境变量export CC=arm-none-linux-gnueabi-gcc (根据自己开发板对应的交叉编译链填写)。
- 配置configure文件,命令 ./configure -shared
- 开始编译make,安装make install。
- 查看生成文件:
/usr/local/include/zconf.h zlib.h
/usr/local/lib/libz.so libz.so.1 libz.so.1.2.8
编译libpng库
- 设置环境变量,把需要的依赖库zlib包含进来
export CPPFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib" - 配置configure文件,./configure --host=arm-linux
- vim config.h,注释掉下面语句 (似乎部分交叉编译链不会出现以下语句)
#define malloc rpl_malloc
- 编译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
- 配置configure文件,输入命令 ./configure --host=arm-linux -prefix=/usr/local/qrencode-arm-linux
- vim Makefile,修改变量LIBS=-lz
- 编译make (如果在编译libpng时没有注释rpl_malloc,在这一步中会报错),成功编译后安装make install。
- 在/usr/local/qrencode-arm-linux/bin生成qrencode
移植
- 将/usr/local/lib目录下的libpng12.so,libpng12.so.0,libpng12.so.0.12.0移植到板子上的/usr/lib下。
- 将/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的软链接文件,将其下载到板子上有时会链接失败,需要重新创建)
- 将/usr/local/qrencode-arm-linux/bin下的qrencode移植到板子的/usr/bin下
测试
在板子上输入命令qrencode -s 6 -o qr.png http://www.baidu.com,运行正常就会生成文件名为qr.png的二维码,二维码内容为一串网址,-s 6为尺寸参数
常见问题
- 运行qrencode提示:no such file
解决方法:一般这种情况是因为交叉编译链和芯片型号不匹配,最好用板子对配套的交叉编译链编译。 - 运行报错:编译qrencode时libpng的版本和开发板上的libpng版本不一致
解决方法:经过研究是因为某些交叉编译链配置configure是没有找到正确的libpng12库,所以编译出来的qrencode和实际移植到板子上的libpng库版本不一致,解决方法设置export png_CFLAGS=-I/usr/local/include/libpng12,export png_LIBS=-L/usr/local/lib -lpng12 - 运行qrencode提示没有libz.so.1,同样方法移植libz.so.1.2.8