Windows下编译libnfc,mfoc,mfcuk
整了一个PN532玩,工具自己编译。
PN532+PL2303
主要参考:在Windows下编译mofc,不过博主的排版实在是让人...
还是自己重新来过吧!
工具还是老一套开源的:cmake,CodeBlock,MinGW(含msys)
编译libnfc
Step1:CMake-GUI配置
不细说太多了,看不明白的把我之前的两篇有关cmake编译的文章看看。
建议先修正Step2中的错误3,不然下面的
Configure
和Generate
的操作还得从头来。
接下来Configure
第一次报错,直接确定再点,又报错,修改那三项如图,再点Configure
就成功了,之后就是Generate
,一次成功!
Step2:CodeBlock编译
编译过程中会遇到以下几种错误:
错误1: unknown type name 'off_t'
解: 插入#include <sys/types.h>
错误2: fatal error: strsafe.h: No such file...
解: 下载补充到路径"/mingw/include"下即可。参考
错误3: ...undefined reference to `pn53x_transceive'
解: 参考, 只需对照最后两个文件的修改即可。
踩过前面的坑,终于看到熟悉的编译成功信息!(无视几个warning)
编译得到的
libnfc.dll
位于release\libnfc
目录,复制到release\utils
目录,命令行执行nfc-list
得到下图:No NFC device found.
什么鬼!!!之前手动选择的三个选项中,第一项
LIBNFC_SYSCONFDIR
是用来设置配置文件路径的,我们填的是“.”,也就是程序的当前目录。需要在nfc-list.exe
程序目录release\utils
下添加配置文件libnfc.conf
,文件内容参考源码包中的libnfc.conf.sample
。不确定设备名称的情况下,需要设置参数:
allow_intrusive_scan = true
默认值是false
。配置文件的方式嫌麻烦,自己用可以修改源代码中的对应默认值:
libnfc折腾结束!
编译mfoc 源码
编译前的准备
因为源码中没有cmake
配置,只能用msys
命令行编译了。要用到autoconf
和automake
,用MinGW Installation Manager
如下图安装包:
编译步骤
- 将编译
libnfc
得到的libnfc.dll.a
改名为libnfc.a
,放入MinGW路径/mingw/lib
内。 - 将pkg.m4文件放入msys路径\share\aclocal-1.11中(参考), 跳过No.2坑
(之所以是No.2,因为不做这一步该错误是第二个出现,出错之后安装步骤要重新来过)
不需要安装pkg-config -
aclocal -I m4 --install
跳过No.1坑,参考 autoreconf -is
-
LIBS=/mingw/lib/libnfc.a ./configure PKG_CONFIG=:
跳过No.4坑(原创)
和No.3坑(参考) make
跳坑记录
configure.ac:17: error: possibly undefined macro: AC_MSG_ERROR
./configure: line 3739: syntax error near unexpected token libnfc
configure: error: libnfc >= 1.7.0 is mandatory.
-
undefined reference to ‘_imp__nfc_init’
... 一连串的undefined reference to
collect2.exe: error: ld returned 1 exit status
PS. 上述看似简单的步骤,中间的曲折不足为外人道,手动哭.....
把编译得到的mfoc.exe
和之前得到的libnfc.dll
以及libusb0.dll
放到同一目录下,运行得到:
mfcuk走起 源码
有了mfoc
的经历作为前提,mfcuk
的编译要简单很多,除了一个头文件endian.h
缺失的错误之外,其它的错误都是mfoc
编译时遇到过的,这里就不赘述了。
endian.h
文件下载之后,保存到路径/mingw/include
下即可。
需要注意执行时的参数:
mfcuk.exe -C -R 3:A -S 250 - s 250 -v 2 -w 6
最后的-w 6
是为了避免Error:0x03
添加的,可以先不加这个参数试试,出现该错误再加上。
怎么用? 参考
网上太多了,略过!
DONE!
最后,给拿来主义的同志:)