在 Win vs2017 下编译 zint


记录如何在 Win vs2017 下编译 zint。

Zint是一个强大的二维码编码生成开源工具,基于C语言开发,支持Code 128, Data Matrix, USPS OneCode, EAN-128, UPC/EAN, ITF, QR Code,Code 16k, PDF417, MicroPDF417, LOGMARS, Maxicode, GS1 DataBar, Aztec等各种码制,采用BSD和GPLv3授权。

Step 1 下载需要的库

zint 本身其实不依赖其他库,但是如果需要使用到 PNG 保存的话,那么需要 libpng 和 zlib。我们这里做一次完整的编译记录,将 libpng 和 zlib 也考虑进去。

首先,下载这三个库,最好放置在同一个文件夹中。本文中,使用 zlib-1.2.8、libpng1635 和 zint-2.6.3_rc2.src.tar(你也可以使用其他版本)。下载链接如下:

zlib https://zlib.net/fossils/
zint https://sourceforge.net/projects/zint/files/zint/
libpng https://sourceforge.net/projects/libpng/files/libpng16/

下载好以后,解压即可,如下图。

Step 2 先编译 libpng

libpng 依赖 zlib,在 libpng 的工程项目中,已经包含了 zlib,因此,我们只要编译 libpng 的项目,就可以得到 libpng 和 zlib 的链接库。而编译 libpng 首先需要编译 zlib。步骤如下:

1. 打开 lpng163 -> projects -> vstudio -> vstudio.sln

我这里使用的是 vs2017,打开 vstudio.sln 时,会提示升级之类的,点确定即可。

2. 解决「error C2220: 警告被视为错误」

如果直接生成解决方案,会出现 「error C2220: 警告被视为错误」 这样的错误,解决方法为:右键项目 -> 属性 -> C/C++ -> 常规 -> 将错误视为警告改为 「否」

3. 先生成 zlib.lib

简单,右键项目 -> 生成 即可

如果成功,Debug 目录中会出现 zlib.lib

4. 再生成 libpng.lib

简单,右键项目 -> 生成 即可

如果成功,Debug 目录中会出现 libpng16.lib 和 libpng16.dll

生成 Release 版本

上述步骤生成的为 Debug 版本的库,通常情况我们也需要 Release 版本的库。生成步骤同 1~4,只是将 Debug 环境改为 Release 环境

由于环境的变化,你可能要重新设置 Step 2 的设置

如果成功,Release 目录中会出现已经编译好的 lib。

Step 3 编译 zint

zint 的依赖库 libpng 和 zlib 已经编译完毕,现在可以开始编译 zint 了

打开 zint -> win32 -> zint.sln

工程结构如下图

设置「附加包含目录」和 「附加库目录」

设置「附加包含目录」:libzint 右键属性 -> C/C++ -> 附加包含目录 -> 添加 lpng1635 目录和 zlib 目录

设置「附加库目录」:libzint 右键属性 -> 链接器 -> 常规 -> 附加库目录 -> 添加 Step 2 中 zlib.lib 和 libpng.lib 存放的位置。

去除 NO_PNG 预处理器定义

如果 NO_PNG 宏被定义,libzint 不会使用到 libpng 和 zlib,但是也无法保存为 .png 格式了。我们这里将 NO_PNG 宏去掉即可。
右键 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 找到 NO_PNG,删掉。

Debug 版本需要添加 「附件依赖项」

很神奇,Release 版本已经设置好了,但是 Debug 版本需要自己设置
libzint 右键属性 -> 链接器 -> 输入 -> 附加依赖项 -> 添加 libpng16.lib 和 zlib.lib

zint 2.6.3 版本的一个坑 (2.6.2 就没有)

经过上面的设置,我们可以进行编译了,但是在 zint-2.6.3 版本中,出现

error LNK2019: 无法解析的外部符号 “int __cdecl vin….
error LNK2019: 无法解析的外部符号”int __cdecl mailmark…

这是因为下面两个函数只有声明,没有定义

extern int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* VIN Code (Vehicle Identification Number) */ extern int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Royal Mail 4-state Mailmark */

这样的错误,解决也很简单。首先,libzint 右键 -> 添加 -> 现有项,找到 backend 文件夹,全选所有文件,添加。

打开 libzint 项目中的 library.c 文件,定位到 177 和 178 行,将其改为

extern int vin(struct zint_symbol *symbol, unsigned char source[], int length);
extern int mailmark(struct zint_symbol *symbol, unsigned char source[], int length);

这两个定义分别在 code.c 596 行和 mailmark.c 125 行找到

OK,我们再右键生成,出现错误

error C2236: 意外的标记“class”。是否忘记了“;”?

定位到 mailmark.c 130 行,将 class 改一个名字,因为 class 与 C++ 关键字重了,这里我改成 myclass

OK,我们再右键生成,生成成功,在 Debug 目录有了 zint.lib 和 zintd.dll。

同样的,在 Release 环境生成对应的 lib 和 dll

生成 zint.exe 来测试测试

libzit 生成完毕之后,可以顺便 zint 项目右键 -> 生成。这样可以生成 zint.exe 命令行操作程序,我们可以用它来测试测试。
在 Debug 或者 Release 目录找到 zint.exe

然后将 libpng.dll 拷贝到 zint.exe 的目录下

用命令行模式输入:zint -o test.png -b 58 -d "Hello World"
在当前目录就出现了一个 test.png,哈哈哈哈,成功!最后贴上 「Hello World」的二维码

在 Win vs2017 下编译 zint相关推荐

  1. VS2017下编译 XP运行程序

    VS2017以MT方式链接编译出来的exe没法在xp下跑, 主要是pe文件中的主系统版本号,不选子系统的情况下默认是6,也就是win7

  2. VS2017下编译Jsoncpp静态库

    1. 下载Jsoncpp源代码 1.1 网址链接: http://sourceforge.net/projects/jsoncpp/ 1.2 百度云链接: 链接:https://pan.baidu.c ...

  3. VS2017下编译SOEM(Simle Open EtherCAT Master)

    1.源码准备与winpcap环境安装 从 Open EtherCAT Society: Home of SOEM and SOES 下载SOEM 1.3.1 源代码 下载wincap https:// ...

  4. go在win环境下编译linux可执行文件

    设置环境变量 cmd执行以下命令 go env -w GOOS=linux 然后正常go build即可 切换回 windows go env -w GOOS=windows go env 命令查看设 ...

  5. 如何 在 .net 下使用 zint 生成条形码

    1.首先你需要编译好的 zint 条码库.什么,你没有?那没关系,请参看:在 win32 下编译 zint 条码库. 2.启动 VISUAL STUDIO,新建一 "Windows Form ...

  6. CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)

    CUDA+VS2017+win环境下 cuda工程环境搭建 引言 前提准备(CUDA和VS的安装) Visual Studio 配置 测试 Reference 引言 在学习CUDA并行计算原理时,在V ...

  7. Windows10+VS2017下安装和 编译openssl库

    windows10+VS2017下安装和编译openssl库 环境 windows10,64位 openssl解压目录:E:\mylib\openssl-1.0.2l openssl安装目录:E:\m ...

  8. win10下编译和使用mnn 2021

    mnn版本1.2.0 Ubuntu子系统下Android编译教程,亲测ok: MNN编译android_jacke121的专栏-CSDN博客 编译转换工具: mnn 编译转换工具 win10 2021 ...

  9. Windows系统下编译torch-points-kernels

    想在Windows系统下运行pytorch做点云深度学习.安装torch-points-kernels遇到了不少问题. 这个博客里主要讲的torch-points3d点云工具箱安装,讲的很全面很详细, ...

最新文章

  1. c语言中合法的字符型常量是,C语言习题库(带答案)-排版.doc
  2. pthread中如何追踪stack over flow
  3. 湖北沙洋中学2021年6月高考成绩查询,2021年荆门中考分数线公布填报志愿时间及录取结果什么时候出...
  4. python合理拆分类别_如何用Python进行词组拆分?
  5. Angular使用中的编码tips(持续更)
  6. ASP.NET中的数据绑定:哪个更快?
  7. 2021-2025年中国电影行业市场供需与战略研究报告
  8. 【转】cs231n学习笔记-CNN-目标检测、定位、分割
  9. linux下Sublime的安装使用
  10. 液压系统仿真软件_利用仿真软件判断系统稳定
  11. oracle中if语句用法,Oracle IF语句的使用 | 学步园
  12. 无网络环境,如何部署Docker镜像
  13. 【漫画程序员涛哥】程序员是如何换灯泡的?
  14. ProcesingJoy ——连线成画【JAVA】
  15. CSS样式内联选择器选择器优先级伪类顺序
  16. python-图像处理-计算机视觉基础-numpy-pandas-PIL
  17. 华为市场上架app签名Pepk工具 使用
  18. Redis - 附近商铺
  19. 软件测试的类型有哪几种?
  20. 扫地机器人朋友圈文案_有关扫地机器人的文案

热门文章

  1. 手机支持html5绘图性能,【高级系列】Canvas绘制性能专题
  2. 安卓抓包软件_你们要的抓包神器!以及抓包原理
  3. java 数组覆盖_JavaSE——数组集合
  4. linux下怎么识别fioa卡,2020年新版电子警察信号灯设计、施工方案.docx
  5. 1.Java 面试题整理(基础篇一)
  6. 安卓学习笔记09:常用布局 - 帧式布局
  7. 【BZOJ3956】Count,单调栈+ST表维护区间最大值
  8. 13.相机和图像——聚焦于对象实战,不断变化的焦距,景深_3
  9. python rq asyncio_python异步IO-asyncio
  10. 华为手机投屏电脑_华为手机如何投屏到电脑?这很实用