在Windows下编译支持ACR122U的libnfc
阅读前请注意:
- 这篇文章只讲如何编译libnfc,具体的使用请移步我的这篇文章Mifare Classic 1K智能卡介绍及nfc-tools的使用。
- 我已经编译好了Windows可用的libnfc,如果你对下面的编译步骤感到困难,或者不想动手去做,可以点此下载我编译好的二进制程序。
- 这篇文章主要参考了这篇教程,但由于它使用的是Windows Vista 32-bit系统而且是为PN532芯片编译的,在细节上会有些不同,而且比较繁琐,因此我重写了相关步骤,以适应于64位系统和ACR122U-A9读卡器。
- 我使用Windows 7 x64编译,编译出的程序可正常在Windows 10 x64上运行。之所以用Windows 7编译是因为我是在虚拟机里搞的,实际上应该是操作系统无关的。
- 本文中所有的文件和程序,安装在
C:\tools\
。
下载libnfc源码
在GitHub上找个最新的release下载即可,下载地址。
举例来说,我下载了libnfc-1.7.1.tar.bz2。
解压到C:\tools\libnfc-1.7.1\
即可。
安装TDM-GCC MinGW
TDM-GCC是一个在Windows上的GCC编译器。
首先下载TDM-GCC,下载地址。
举例来说,我下载了tdm64-gcc-5.1.0-2.exe。
安装时注意去掉勾选“Check for updated files on the TDM-GCC server”。
安装在C:\tools\TDM-GCC-64\
即可。
安装libusb-win32
libusb是个关于USB操作的库,libusb-win32是在Windows上编译好的二进制链接库。
首先下载libusb-win32,下载地址。
举例来说,我下载了libusb-win32-bin-1.2.6.0.zip。
解压到C:\tools\libusb-win32-bin-1.2.6.0\
即可。
安装PCRE
PCRE是一个Perl语言兼容正则表达式函数库。
首先下载PCRE,下载地址。
举例来说,我下载了pcre-7.0.exe。
安装过程非常常规,安装在C:\tools\GnuWin32\
即可。
安装CMake
CMake是一个开源的跨平台自动化建构系统,简单来说,就是可以用它的语法和图形化配置程序生成各种Makefile和IDE的project文件。
首先下载CMake,下载地址。
举例来说,我下载了cmake-3.7.0-rc3-win64-x64.msi。
安装过程也很常规,不放图了。
安装在C:\tools\CMake\
即可。
配置CMake
执行C:\tools\CMake\bin\cmake-gui.exe
。
如图,配置好源码所在目录和编译所用目录。
之后点击configure,会让你选择构建所使用的编译器,选择MinGW Makefiles即可。
之后会遇到各种配置问题。按下图配置好即可。(可能会遇到缺少某些选项的情况,这时候只要把已有的内容填好,点击configure就会出现)
注意:一定要勾选LIBNFC_DRIVER_ACR122_PCSC
(默认是不勾选的),不然无法正常使用ACR122U-A9。而我们这里使用winscard.h
和libwinscard.a
代替libpcsc
。
由于点击configure之后,PCSC的路径配置项会消失,所以这是在之前截的。如果一切正常,会出现Configuring done字样,如下图。
之后点击Generate,即可生成Makefile文件。
编译
进入到C:\tools\libnfc
目录,执行C:\tools\TDM-GCC-64\bin\mingw32-make.exe
即可。
等待编译完成。
解决dll依赖
首先,编译好的可执行文件在C:\tools\libnfc\examples
和C:\tools\libnfc\utils
,将其全部复制到单独的libnfc文件夹中。
之后需要解决dll依赖,把dll复制到exe旁边。
具体来说,有:
C:\tools\libnfc\libnfc\libnfc.dll
C:\tools\GnuWin32\bin\pcre3.dll
- 将
C:\tools\libusb-win32-bin-1.2.6.0\bin\x86\libusb0_x86.dll
复制并改名为libusb0.dll
测试
插入读卡器,执行nfc-list
,出现如下结果则成功!