【问题标题】:libfreefare mingw32-make error on windowsWindows 上的 libfreefare mingw32-make 错误
【发布时间】:2015-02-18 08:47:22
【问题描述】:

我使用的是 Windows 8 64 位。

我已成功安装 libnfc,并且可以使用 libnfc\utils 中的 .exe 示例(如 nfc-mfclassic.exe;nfc-list.exe ...)

我想操作 Mifare 卡并使用 NDEF 格式,所以我正在尝试在 Windows 上安装 libfreefare。

我遵循了 libnfc.org 上的教程,展示了如何在 Windows 上安装 libfreefare,它运行良好。

我使用 cmake-gui 生成构建文件

现在进入 mingw32-make 的步骤,我有这个错误:

[ 55%] Building C object libfreefare/CMakeFiles/freefare.dir/tlv.c.obj
Linking C shared library libfreefare.dll
CMakeFiles\freefare.dir/objects.a(mifare_desfire.c.obj):mifare_desfire.c:(.text+0x64f): undefined reference to `RAND_bytes'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x1219): undefined reference to `DES_ecb_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x1242): undefined reference to `DES_ecb_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x1280): undefined reference to `DES_ecb_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x12a9): undefined reference to `DES_ecb_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x12d0): undefined reference to `DES_ecb_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x12f9): more undefined references to `DES_ecb_encrypt' follow
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x1489): undefined reference to `AES_set_encrypt_key'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x14a8): undefined reference to `AES_encrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x14c7): undefined reference to `AES_set_decrypt_key'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_crypto.c.obj):mifare_desfire_crypto.c:(.text+0x14e6): undefined reference to `AES_decrypt'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_key.c.obj):mifare_desfire_key.c:(.text+0x17): undefined reference to `DES_set_key'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_key.c.obj):mifare_desfire_key.c:(.text+0x32): undefined reference to `DES_set_key'
CMakeFiles\freefare.dir/objects.a(mifare_desfire_key.c.obj):mifare_desfire_key.c:(.text+0x58): undefined reference to `DES_set_key'
CMakeFiles\freefare.dir/objects.a(mifare_ultralight.c.obj):mifare_ultralight.c:(.text+0x7a3): undefined reference to `DES_random_key'
collect2.exe: error: ld returned 1 exit status
libfreefare\CMakeFiles\freefare.dir\build.make:351: recipe for target 'libfreefare/libfreefare.dll' failed
mingw32-make[2]: *** [libfreefare/libfreefare.dll] Error 1
CMakeFiles\Makefile2:74: recipe for target 'libfreefare/CMakeFiles/freefare.dir/all' failed
mingw32-make[1]: *** [libfreefare/CMakeFiles/freefare.dir/all] Error 2
Makefile:116: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

感谢您的帮助!!

【问题讨论】:

  • 在我看来: 1. 您可能没有在编译中包含具有上述未定义变量定义的文件; 2. 您可能在程序中包含了该文件,但在 Makefile 文件路径中未提及供编译器查找。您能否先在文件中搜索提到上述变量的位置,然后检查它们包含的文件是否以#include 的形式存在,或者文件路径是否位于 Makefile 路径之一中
  • 您是否有兼容版本的 OpenSSL 并且是否正确链接到 libcrypto?
  • @Peter 我发现在mifare_desfire.c 中有#include <openssl/rand.h> 所以我认为这是一个路径问题然后我将它更改为#include <D:\tools\OpenSSL-Win64\include\openssl\rand.h> 但它没有工作。在包含mifare_desfire.c 的目录中有 CMakeLists.txt 我添加了include_directories(D:\\tools\\OpenSSL-Win64\\include) 但没有用,有没有办法指示附加的包含目录?
  • @MichaelRoland 我从这里Win64OpenSSL-1_0_1L.exe link[/link] 我不认为我将它链接到 libcryto 我在 OpenSSL 发行版中没有它。我有 libssl32.dll 我可以在这个地方使用这个吗?
  • @wald 看到这个问题:Win7 OpenSSL libcrypto equivalent missing

标签: nfc ndef lib-nfc


【解决方案1】:

我找到了解决办法:

在文件夹的根目录:libfreefare-0.4.0CMakeLists.txt

我替换了这一行:

set(LIBS ${LIBS} ${LIBNFC_LIBRARIES} ${OPENSSL_LIBRARIES})

这个

set(LIBS ${LIBS} ${LIBNFC_LIBRARIES} D:/tools/OpenSSL-Win32/libeay32.dll D:/tools/OpenSSL-Win32/libssl32.dll)

而且效果很好!感谢@MichaelRoland 提供有关 libcrypto 等价物的提示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2016-01-31
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多