编程小技

Windows下编译libnfc,mfoc,mfcuk

2018-07-26  本文已影响30人  粗识名姓

整了一个PN532玩,工具自己编译。


PN532+PL2303

主要参考:在Windows下编译mofc,不过博主的排版实在是让人...
还是自己重新来过吧!
工具还是老一套开源的:cmakeCodeBlockMinGW(含msys)

编译libnfc

Step1:CMake-GUI配置


不细说太多了,看不明白的把我之前的两篇有关cmake编译的文章看看。

建议先修正Step2中的错误3,不然下面的ConfigureGenerate的操作还得从头来。

接下来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)

编译完成.png
编译得到的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命令行编译了。要用到autoconfautomake,用MinGW Installation Manager如下图安装包:

MSYS选择包

编译步骤

  1. 将编译libnfc得到的libnfc.dll.a改名为libnfc.a,放入MinGW路径/mingw/lib内。
  2. pkg.m4文件放入msys路径\share\aclocal-1.11中(参考), 跳过No.2坑(之所以是No.2,因为不做这一步该错误是第二个出现,出错之后安装步骤要重新来过) 不需要安装pkg-config
  3. aclocal -I m4 --install 跳过No.1坑,参考
  4. autoreconf -is
  5. LIBS=/mingw/lib/libnfc.a ./configure PKG_CONFIG=: 跳过No.4坑(原创)和No.3坑(参考)
  6. make

跳坑记录

  1. configure.ac:17: error: possibly undefined macro: AC_MSG_ERROR
  2. ./configure: line 3739: syntax error near unexpected token libnfc
  3. configure: error: libnfc >= 1.7.0 is mandatory.
  4. 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!

最后,给拿来主义的同志:)

上一篇下一篇

猜你喜欢

热点阅读