2015-02-18 6 views
0

Я нахожусь на окнах 8 64 бит.libfreefare Ошибка mingw32-make на окнах

Я установил успешно libnfc, и я могу использовать Исполняемые примеры, которые находятся в libnfc \ Utils (например, НКА-mfclassic.exe; НКА-list.exe ...)

Я хотел бы чтобы манипулировать картами Mifare и использовать формат NDEF, поэтому я пытаюсь установить libfreefare в Windows.

Я следил за учебником по libnfc.org, показывающим, как иметь libfreefare в Windows, и он отлично работал.

И я использовал CMake-GUI для создания файла сборки

Переходя теперь к шагу mingw32-маке, у меня есть эта ошибка:

[ 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

Мне кажется: 1. Возможно, вы не включили файл в компиляцию, которая имеет определения вышеперечисленных неопределенных переменных; 2. Возможно, вы включили файл в свою программу, но он не упоминается в файлах файлов Makefile для вашего компилятора. Не могли бы вы сначала выполнить поиск в вашем файле, где упомянуты вышеперечисленные переменные, а затем проверить, присутствует ли файл, в который они включены, в виде #include или путь к файлу находится в одном из путей Makefile. –

+0

. У вас есть совместимая версия OpenSSL и правильно ли вы ссылались на libcrypto? –

+0

@Peter Я обнаружил, что в 'mifare_desfire.c' есть' #include ', поэтому я думал, что это проблема пути, и я изменил его для' #include , но это не сработало. В каталоге, содержащем 'mifare_desfire.c', есть CMakeLists.txt, я добавил' include_directories (D: \\ tools \\ OpenSSL-Win64 \\ include) ', но не работал, есть способ указать дополнительную каталоги include ? – wald

ответ

1

Я нашел решение:

В корне папки: libfreefare-0.4.0 есть CMakeLists.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