Visual Studio中使用开源二维码QR库libqr

1 篇文章 0 订阅

分享一个轻巧的开源二维码QR库libqr,源码可以从GitHub上下载。下面我们详细说明一下如何在Visual Studio中编译使用。

1. 源码下载

地址:https://github.com/rsky/qrcode

可以使用git clone下载,也可以直接打包为zip文件下载。

2. 编译

该项目需要使用cmake编译,因此我们先下载cmake。

2.1 cmake下载

cmake可以从官网下载,为了避免设置环境变量的麻烦,我们直接下载安装包,安装的时候选择设置环境变量,然后就可以直接使用cmake命令了。

下载地址(截止目前,最新为3.9.1版本):

下载完成后直接安装就好了。注意选择设置环境变量。
然后在命令行中执行cmake命令,能正确执行则说明安装成功。否则需要手动在环境变量中添加cmake命令的路径。

image

2.2 编译qrcode库

进入qrcode库所在目录,在libqr文件夹下有个CMakeLists.txt文件,在编译之前我们先修改一下这个文件。

说明一下,该项目依赖于zlib库,因此没有zlib库的朋友需要先下载zlib库,可以去下载源码编译,也可以使用我已经编译好的库直接使用。

已编译好的库下载地址:https://pan.baidu.com/s/1nuErVtv

下载zlib库之后,我们先编辑CMakeLists.txt文件。

修改22-24行,替换为以下内容:

##############################################################################
#find_package(ZLIB)
#set my own zlib path
set (ZLIB_INCLUDE_DIRS "")  #set in visual studio
set (ZLIB_LIBRARIES "")     #set in visual studio

#add_definitions(-Wall -Wextra)
# Set default compile flags for GCC
if(CMAKE_COMPILER_IS_GNUCXX)
 message(STATUS "GCC detected, adding compile flags")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -pedantic -Wall -Wextra")
endif(CMAKE_COMPILER_IS_GNUCXX)
##############################################################################
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

主要意思是将zlib的引用目录设置为空(我们将在VS中编译时指定),同时根据系统编译环境指定编译参数。

image

然后打开cmd,进入到qrcode的libqr目录下,执行 cmake . 命令:

image

然后会生成VS的项目文件(.vcxproj)

image

我们打开libqr_shared.vcxproj编译一个DLL动态库。

设置预处理 QR_DLL_BUILD (如果是编译静态库项目libqr_static则设置为 QR_STATIC_BUILD)

这里写图片描述

设置我们之前下载的zlib库头文件和lib库目录(我放在qrcode项目下的include和lib目录里,注意Debug版本和Release版本的对应):

这里写图片描述

这里写图片描述

这里写图片描述

然后编译libqr_shared项目即可。

(注意,编译时可能会提示 error LNK2019: 无法解析的外部符号 _snprintf 错误,我们替换所有snprintf为_snprintf,vsnprintf为_vsnprintf就可以了。)
最终会在Debug或者Release目录下(看你编译的是debug还是release版本)生成qr.lib和qr.dll两个文件,然后就可以在其他项目中使用了。

这里写图片描述

3. 测试使用qrcode库

我们创建一个Test项目来测试qr库。代码如下:

#include <stdio.h>
#include <fstream>
#include "qr.h"

using namespace std;

int main()
{
    int errcode = QR_ERR_NONE;
    //qrInit的5个参数分别是version,mode,纠错等级和掩码,使用过程中使用除了QR_EM_8BIT以外的mode会生成不正常的二维码,暂时不知道原因。
    QRCode* p = qrInit(10, QR_EM_8BIT, 2, -1, &errcode);
    if (p == NULL)
    {
        printf("error\n");
        return -1;
    }

    string strData = "百度一下,你就知道!";
    qrAddData(p, (const qr_byte_t*)strData.data(), strData.length());
    //注意需要调用qrFinalize函数
    if (!qrFinalize(p))
    {
        printf("finalize error\n");
        return -1;
    }
    int size = 0;
    //两个5分别表示:像素之间的距离和二维码图片的放大倍数,范围都是1-16
    qr_byte_t * buffer = qrSymbolToBMP(p, 5, 5, &size);
    if (buffer == NULL)
    {
        printf("error %s", qrGetErrorInfo(p));
        return -1;
    }
    ofstream f("qrcode.bmp");
    f.write((const char *)buffer, size);
    f.close();
    return 0;
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

设置qrcode库头文件及lib库路径
这里写图片描述

这里写图片描述

这里写图片描述

编译后会生成test.exe文件,我们将以上两个dll(zlib.dll、qr.dll)文件放到test.exe目录下

这里写图片描述

执行test.exe即可生成qrcode.bmp的二维码文件。

以下为“百度一下,你就知道!”生成的二维码,大家可以扫一扫试试。

这里写图片描述

(参考: http://blog.csdn.net/a549875231/article/details/52048117)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值