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

来源:互联网 发布:yum安装ruby最新版本 编辑:程序博客网 时间:2024/06/07 22:11

分享一个轻巧的开源二维码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版本):

  • 64位: https://cmake.org/files/v3.9/cmake-3.9.1-win64-x64.msi
  • 32位: https://cmake.org/files/v3.9/cmake-3.9.1-win32-x86.msi

下载完成后直接安装就好了。注意选择设置环境变量。
然后在命令行中执行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 pathset (ZLIB_INCLUDE_DIRS "")  #set in visual studioset (ZLIB_LIBRARIES "")     #set in visual studio#add_definitions(-Wall -Wextra)# Set default compile flags for GCCif(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)##############################################################################

主要意思是将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;}

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

这里写图片描述

这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

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

原创粉丝点击