在 Win vs2017 下编译 zint
在 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相关推荐
- VS2017下编译 XP运行程序
VS2017以MT方式链接编译出来的exe没法在xp下跑, 主要是pe文件中的主系统版本号,不选子系统的情况下默认是6,也就是win7
- VS2017下编译Jsoncpp静态库
1. 下载Jsoncpp源代码 1.1 网址链接: http://sourceforge.net/projects/jsoncpp/ 1.2 百度云链接: 链接:https://pan.baidu.c ...
- VS2017下编译SOEM(Simle Open EtherCAT Master)
1.源码准备与winpcap环境安装 从 Open EtherCAT Society: Home of SOEM and SOES 下载SOEM 1.3.1 源代码 下载wincap https:// ...
- go在win环境下编译linux可执行文件
设置环境变量 cmd执行以下命令 go env -w GOOS=linux 然后正常go build即可 切换回 windows go env -w GOOS=windows go env 命令查看设 ...
- 如何 在 .net 下使用 zint 生成条形码
1.首先你需要编译好的 zint 条码库.什么,你没有?那没关系,请参看:在 win32 下编译 zint 条码库. 2.启动 VISUAL STUDIO,新建一 "Windows Form ...
- CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)
CUDA+VS2017+win环境下 cuda工程环境搭建 引言 前提准备(CUDA和VS的安装) Visual Studio 配置 测试 Reference 引言 在学习CUDA并行计算原理时,在V ...
- Windows10+VS2017下安装和 编译openssl库
windows10+VS2017下安装和编译openssl库 环境 windows10,64位 openssl解压目录:E:\mylib\openssl-1.0.2l openssl安装目录:E:\m ...
- win10下编译和使用mnn 2021
mnn版本1.2.0 Ubuntu子系统下Android编译教程,亲测ok: MNN编译android_jacke121的专栏-CSDN博客 编译转换工具: mnn 编译转换工具 win10 2021 ...
- Windows系统下编译torch-points-kernels
想在Windows系统下运行pytorch做点云深度学习.安装torch-points-kernels遇到了不少问题. 这个博客里主要讲的torch-points3d点云工具箱安装,讲的很全面很详细, ...
最新文章
- c语言中合法的字符型常量是,C语言习题库(带答案)-排版.doc
- pthread中如何追踪stack over flow
- 湖北沙洋中学2021年6月高考成绩查询,2021年荆门中考分数线公布填报志愿时间及录取结果什么时候出...
- python合理拆分类别_如何用Python进行词组拆分?
- Angular使用中的编码tips(持续更)
- ASP.NET中的数据绑定:哪个更快?
- 2021-2025年中国电影行业市场供需与战略研究报告
- 【转】cs231n学习笔记-CNN-目标检测、定位、分割
- linux下Sublime的安装使用
- 液压系统仿真软件_利用仿真软件判断系统稳定
- oracle中if语句用法,Oracle IF语句的使用 | 学步园
- 无网络环境,如何部署Docker镜像
- 【漫画程序员涛哥】程序员是如何换灯泡的?
- ProcesingJoy ——连线成画【JAVA】
- CSS样式内联选择器选择器优先级伪类顺序
- python-图像处理-计算机视觉基础-numpy-pandas-PIL
- 华为市场上架app签名Pepk工具 使用
- Redis - 附近商铺
- 软件测试的类型有哪几种?
- 扫地机器人朋友圈文案_有关扫地机器人的文案
热门文章
- 手机支持html5绘图性能,【高级系列】Canvas绘制性能专题
- 安卓抓包软件_你们要的抓包神器!以及抓包原理
- java 数组覆盖_JavaSE——数组集合
- linux下怎么识别fioa卡,2020年新版电子警察信号灯设计、施工方案.docx
- 1.Java 面试题整理(基础篇一)
- 安卓学习笔记09:常用布局 - 帧式布局
- 【BZOJ3956】Count,单调栈+ST表维护区间最大值
- 13.相机和图像——聚焦于对象实战,不断变化的焦距,景深_3
- python rq asyncio_python异步IO-asyncio
- 华为手机投屏电脑_华为手机如何投屏到电脑?这很实用