qrencode-libqrecode的安装移植和应用-qrencode的交叉编译
来源:互联网 发布:渭南市广电网络营业厅 编辑:程序博客网 时间:2024/06/11 20:48
一:依赖第三方库的编译方法
qrencode编译需要libpng库,而libpng库依赖zlib库
1、从http://zlib.net/下载zlib库
tar xvzf zlib-1.2.8.tar.gz,进入zlib-1.2.8文件夹
./configure
make
make install
2、从http://sourceforge.net/projects/libpng/files/ 下载libpng-1.6.17.tar.xz
tar xvf libpng-1.6.17.tar.xz得到libpng-1.6.17文件夹
在/home目录下创建libpng
进入libpng-1.6.17文件夹
./configure --prefix=/home/libpng
make
make install
3、从http://fukuchi.org/works/qrencode/ 下载qrencode-3.4.4.tar.gz
tar xvzf qrencode-3.4.4.tar.gz
设置png_CFLAGS和png_LIBS环境变量
在.bashrc文件中添加
export png_CFLAGS="-I/home/libpng/include"
export png_LIBS="-L/home/libpng/lib -lpng"
mkdir libqrencode
进入qrencode-3.4.4目录
./configure --prefix=/home/libqrencode
make
make install
安装完毕
-----------------移植--------------------------------------------------------------------------------------------------------------------------
1、交叉编译zlib
编译平台:ubuntu14.04交叉工具链:arm-none-linux-gnueabi-4.8.3
、简介
zlib是提供数据压缩用的函式库,使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。
2、交叉编译zlib步骤tar xvzf zlib-1.2.8.tar.gz,进入zlib-1.2.8文件夹
mkdir /home/zlib-1.2.8-arm
#cd zlib-1.2.8
#./configure --prefix=/home/zlib-1.2.8-arm
Zlib配置是不支持--host项,交叉编译时需要手动更改Makefile,将Makfile里的gcc、ar、ranlib均加上前缀arm-none-linux-gnueabi-(可以看交叉编译工具链的安装目录下的前缀),再执行make && make install,编译安装成功后在--prefix指定的目录下生成include、shared和lib目录3、交叉编译libpng步骤
#tar xvf libpng-1.6.17.tar.xz
mkdir /home/libpng-arm
#cd libpng-1.6.17
#./configure --prefix=/home/libpng-arm --host=arm-none-linux-gnueabi
出现错误:
Checking for zlibVersion in -lz ... No
问题分析:
Libpng配置是会去检测zlib库,configure时加上zlib库的路径信息即可。
#./configure --prefix=/home/libpng-arm --host=arm-none-linux-gnueabi LIBS=-L/home/zlib-1.2.8-arm/lib CPPFLAGS=-I/home/zlib-1.2.8-arm/include
配置完成后,执行make && make install,编译安装成功后在--prefix指定的目录下生成bin、include、shared和lib目录。
4.交叉编译qrencode-3.4.4.tar.gz
tar xvzf qrencode-3.4.4.tar.gz
设置png_CFLAGS和png_LIBS环境变量
在.bashrc文件中添加
export png_CFLAGS="-I/home/libpng-arm/include"
export png_LIBS="-L/home/libpng-arm/lib -lpng"
mkdir libqrencode
进入qrencode-3.4.4目录
./configure --prefix=/homel/libqrencode-arm --host=arm-none-linux-gnueabi
make
报错说libpng16not found 中的函数不行。后面看了其他的说法,qrencode不需要依赖第三方库,可以加选项 --without-tools,这个未解决。
make install
安装完毕
二:不依赖第三方库的编译方法
1、从http://fukuchi.org/works/qrencode/ 下载qrencode-3.4.4.tar.gz
tar xvzf qrencode-3.4.4.tar.gz
mkdir libqrencode进入qrencode-3.4.4目录
./configure --prefix=/home/libqrencode --without-tools
make
make install
安装完毕
2。交叉编译qrencode-3.4.4.tar.gztar xvzf qrencode-3.4.4.tar.gz
mkdir libqrencode-arm
./configure --prefix=/homel/libqrencode-arm --host=arm-none-linux-gnueabi --without-tools
make
make install
安装完毕
三:应用qrencode在qt上参考:http://blog.csdn.net/liyuanbhu/article/details/44599031
-------------------------------------创建一个在qtcretor的gui应用,不含.ui界面文件
qrwidget.h头文件:
- #ifndef QRWIDGET_H
- #define QRWIDGET_H
- #include <QWidget>
- #include "qrencode.h"
- class QRWidget : public QWidget
- {
- Q_OBJECT
- public:
- explicit QRWidget(QWidget *parent = 0);
- ~QRWidget();
- void setString(QString str);
- int getQRWidth() const;
- bool saveImage(QString name, int size);
- private:
- void draw(QPainter &painter, int width, int height);
- QString string;
- QRcode *qr;
- signals:
- protected:
- void paintEvent(QPaintEvent *);
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
- public slots:
- };
- #endif // QRWIDGET_H
- #include "qrwidget.h"
- #include <QPainter>
- #include <QImage>
- QRWidget::QRWidget(QWidget *parent) : QWidget(parent)
- {
- qr = NULL;
- setString("Hello QR Code");
- }
- QRWidget::~QRWidget()
- {
- if(qr != NULL)
- {
- QRcode_free(qr);
- }
- }
- int QRWidget::getQRWidth() const
- {
- if(qr != NULL)
- {
- return qr->width;
- }
- else
- {
- return 0;
- }
- }
- void QRWidget::setString(QString str)
- {
- string = str;
- if(qr != NULL)
- {
- QRcode_free(qr);
- }
- qr = QRcode_encodeString(string.toStdString().c_str(),
- 1,
- QR_ECLEVEL_L,
- QR_MODE_8,
- 1);
- update();
- }
- QSize QRWidget::sizeHint() const
- {
- QSize s;
- if(qr != NULL)
- {
- int qr_width = qr->width > 0 ? qr->width : 1;
- s = QSize(qr_width * 4, qr_width * 4);
- }
- else
- {
- s = QSize(50, 50);
- }
- return s;
- }
- QSize QRWidget::minimumSizeHint() const
- {
- QSize s;
- if(qr != NULL)
- {
- int qr_width = qr->width > 0 ? qr->width : 1;
- s = QSize(qr_width, qr_width);
- }
- else
- {
- s = QSize(50, 50);
- }
- return s;
- }
- bool QRWidget::saveImage(QString fileName, int size)
- {
- if(size != 0 && !fileName.isEmpty())
- {
- QImage image(size, size, QImage::Format_Mono);
- QPainter painter(&image);
- QColor background(Qt::white);
- painter.setBrush(background);
- painter.setPen(Qt::NoPen);
- painter.drawRect(0, 0, size, size);
- if(qr != NULL)
- {
- draw(painter, size, size);
- }
- return image.save(fileName);
- }
- else
- {
- return false;
- }
- }
- void QRWidget::draw(QPainter &painter, int width, int height)
- {
- QColor foreground(Qt::black);
- painter.setBrush(foreground);
- const int qr_width = qr->width > 0 ? qr->width : 1;
- double scale_x = width / qr_width;
- double scale_y = height / qr_width;
- for( int y = 0; y < qr_width; y ++)
- {
- for(int x = 0; x < qr_width; x++)
- {
- unsigned char b = qr->data[y * qr_width + x];
- if(b & 0x01)
- {
- QRectF r(x * scale_x, y * scale_y, scale_x, scale_y);
- painter.drawRects(&r, 1);
- }
- }
- }
- }
- void QRWidget::paintEvent(QPaintEvent *)
- {
- QPainter painter(this);
- QColor background(Qt::white);
- painter.setBrush(background);
- painter.setPen(Qt::NoPen);
- painter.drawRect(0, 0, width(), height());
- if(qr != NULL)
- {
- draw(painter, width(), height());
- }
- }
2.拷贝刚才编译的qrencode.h 到当前目录
3.添加qrencode和libqrencode.so*的路径到工程中
4.复制上面的贴的代码即可编译,然后把libqrencode.so*的文件全部复制到运行的debug或release里面;
- qrencode-libqrecode的安装移植和应用-qrencode的交叉编译
- qrencode交叉编译
- qrencode 库 的引入
- 关于qrencode的使用
- qrencode-3.4.4.tar.gz在arm上的移植
- C#下利用移植的qrencode生成二维码
- qrencode二维码生成在linux下的编译
- qrencode二维码生成在linux下的编译(转)
- qrencode 第三方库 的vs编译---------------------完全正确
- 二维码生成软件qrencode的安装与试用
- VS2010 编译生成 qrencode
- vc2010 编译 qrencode
- QRencode编译Makefile
- 基于qrencode-3.4.4的二维码生成
- QR code二维码简介及Qrencode库的移植与使用
- 通过 bitbake 移植 qrencode 到嵌入式
- openssl简介以及源码移植的交叉编译和安装
- QR_ENCODE_3.2 qrencode 二维码生成和识别
- Maven WEB 项目使用ProGuard进行混淆,最佳解决方案&详解
- Makefile详解 (转--不错就是有点长)
- TabLayout的自定义实现
- Python 面向对象编程1
- jfinal在service层调用session
- qrencode-libqrecode的安装移植和应用-qrencode的交叉编译
- 人人都看得懂的正则表达式教程
- 读书笔记--关于Cocoa框架中的类
- SQLite数据库(上)
- 命令行中使用adb安装apk
- kindeditor html代码过滤 首发
- Launch4j Bundle jre
- 关于极光推送收不到通知的问题
- iOS-CoreAnimation基础(二)