【发布时间】: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.exelink[/link] 我不认为我将它链接到 libcryto 我在 OpenSSL 发行版中没有它。我有 libssl32.dll 我可以在这个地方使用这个吗? -
@wald 看到这个问题:Win7 OpenSSL libcrypto equivalent missing