Всем привет! Просветите в области системного программирования. Есть среда Debian GNU/Linux 12 AMD64 со всеми обновлениями. Пытаюсь освоить pcsc-lite, и вот сабжевая проблема.
Версия пакета libpcsclite-dev: 1.9.9-2.
Что делал и что получалось:
mkdir -p ~/devel/pcsclite-20240813-001 ; cd ~/devel/pcsclite-20240813-001
cp /usr/share/doc/libpcsclite-dev/examples/pcsc_demo.c .
gcc -o pcsc_demo pcsc_demo.c
pcsc_demo.c:39:10: fatal error: winscard.h: Нет такого файла или каталога
39 | #include <winscard.h>
| ^~~~~~~~~~~~
compilation terminated.
, хотя winscard.h есть в /usr/include/PCSC/ . Далее
gcc -I /usr/include/PCSC/ -l pcsclite -o pcsc_demo pcsc_demo.c
/usr/bin/ld: /tmp/ccGvDSs7.o: предупреждение: перемещение указывает на «g_rgSCardT1Pci» из раздела только для чтения «.text»
/usr/bin/ld: /tmp/ccGvDSs7.o: в функции «main»:
pcsc_demo.c:(.text+0x172): неопределённая ссылка на «SCardEstablishContext»
/usr/bin/ld: pcsc_demo.c:(.text+0x1c3): неопределённая ссылка на «SCardListReaders»
/usr/bin/ld: pcsc_demo.c:(.text+0x1da): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x392): неопределённая ссылка на «SCardConnect»
/usr/bin/ld: pcsc_demo.c:(.text+0x3c4): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x438): неопределённая ссылка на «SCardStatus»
/usr/bin/ld: pcsc_demo.c:(.text+0x50d): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x55b): неопределённая ссылка на «g_rgSCardT0Pci»
/usr/bin/ld: pcsc_demo.c:(.text+0x568): неопределённая ссылка на «g_rgSCardT1Pci»
/usr/bin/ld: pcsc_demo.c:(.text+0x622): неопределённая ссылка на «SCardTransmit»
/usr/bin/ld: pcsc_demo.c:(.text+0x69b): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x6e1): неопределённая ссылка на «SCardDisconnect»
/usr/bin/ld: pcsc_demo.c:(.text+0x6f8): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x770): неопределённая ссылка на «SCardConnect»
/usr/bin/ld: pcsc_demo.c:(.text+0x7a2): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x877): неопределённая ссылка на «SCardTransmit»
/usr/bin/ld: pcsc_demo.c:(.text+0x8f0): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x947): неопределённая ссылка на «SCardReconnect»
/usr/bin/ld: pcsc_demo.c:(.text+0x95e): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0x9d2): неопределённая ссылка на «SCardStatus»
/usr/bin/ld: pcsc_demo.c:(.text+0xaa7): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xb12): неопределённая ссылка на «SCardGetStatusChange»
/usr/bin/ld: pcsc_demo.c:(.text+0xb47): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xb88): неопределённая ссылка на «SCardBeginTransaction»
/usr/bin/ld: pcsc_demo.c:(.text+0xb9f): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xc74): неопределённая ссылка на «SCardTransmit»
/usr/bin/ld: pcsc_demo.c:(.text+0xced): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xd33): неопределённая ссылка на «SCardEndTransaction»
/usr/bin/ld: pcsc_demo.c:(.text+0xd4a): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xd8d): неопределённая ссылка на «SCardDisconnect»
/usr/bin/ld: pcsc_demo.c:(.text+0xda4): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: pcsc_demo.c:(.text+0xdf2): неопределённая ссылка на «SCardFreeMemory»
/usr/bin/ld: pcsc_demo.c:(.text+0xdfe): неопределённая ссылка на «SCardReleaseContext»
/usr/bin/ld: pcsc_demo.c:(.text+0xe15): неопределённая ссылка на «pcsc_stringify_error»
/usr/bin/ld: предупреждение: создаётся DT_TEXTREL в PIE
collect2: error: ld returned 1 exit status
Также пробовал обходной путь: поставил libpcsc-perl, у которого также есть зависимость от пакета libpcsclite1, и запускал пример оттуда — там по крайней мере видно, что что-то работает:
/usr/share/doc/libpcsc-perl/examples/single_reader.pl
Getting context:
........................................ OK
Retrieving readers'list:
ACS ACR1252 1S CL Reader [ACR1252 Dual Reader PICC] 00 00
ACS ACR1252 1S CL Reader [ACR1252 Dual Reader SAM] 01 00
........................................ OK
Connecting to the card:
........................................ OK
Getting Status:
ReaderName = ACS ACR1252 1S CL Reader [ACR1252 Dual Reader PICC] 00 00
Status = 20034
Protocol = 2
ATR = 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 26 00 00 00 00 4D
........................................ OK
Exchanging data:
Can't transmit data: Transaction failed. at /usr/share/doc/libpcsc-perl/examples/single_reader.pl line 103.