하드웨어/rfid_nfc_smartcard
libpcsclite 빌드 + 주의사항
구차니
2025. 2. 25. 15:48
어우 묘하게 많은 패키지를 요구하네
$ sudo apt-get install libpolkit-gobject-1-dev libsystemd-dev doxygen $ meson setup builddir $ cd builddir/ $ meson compile $ meson install |
[링크 : https://github.com/LudovicRousseau/PCSC]
[링크 : https://blog.apdu.fr/posts/2024/05/pcsc-lite-now-uses-meson-build-tool/]
[링크 : https://pcsclite.apdu.fr/]
[링크 : https://github.com/FedeDP/Clightd/issues/41] polkit-gobject-1 에러
meson install 안하면 아래와 같이 so 파일 없다고 에러난다.
$ ./pcsc_demo PC/SC sample code V 1.4 2003-2009, Ludovic Rousseau <ludovic.rousseau@free.fr> THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL FOR END USERS! Do NOT use it unless you really know what you do. loading "libpcsclite_real.so.1" failed: libpcsclite_real.so.1: cannot open shared object file: No such file or directory SCardEstablishContext: Cannot Connect to Resource Manager 80100001 |
근데 설치하고 나서도 먼가 수행되진 않는다.
+
아무생각 없이 meson install 했다가 한시간 날림..
pcsc_scan 하면 서비스가 정지되었다는데
$ pcsc_scan SCardEstablishContext: Service was stopped. |
서비스는 돈다. 그런데.. 버전이 맞지 않다고
$ sudo service pcscd status ● pcscd.service - PC/SC Smart Card Daemon Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled) Active: active (running) since Tue 2025-02-25 16:36:23 KST; 37s ago TriggeredBy: ● pcscd.socket Docs: man:pcscd(8) Main PID: 865510 (pcscd) Tasks: 6 (limit: 18836) Memory: 1.1M CPU: 63ms CGroup: /system.slice/pcscd.service └─865510 /usr/sbin/pcscd --foreground --auto-exit 2월 25 16:36:23 minimonk systemd[1]: Started PC/SC Smart Card Daemon. 2월 25 16:36:23 minimonk pcscd[865510]: 00000000 winscard_svc.c:382:ContextThread() Communication protocol mismatch! 2월 25 16:36:23 minimonk pcscd[865510]: 00000085 winscard_svc.c:384:ContextThread() Client protocol is 4:5 2월 25 16:36:23 minimonk pcscd[865510]: 00000007 winscard_svc.c:386:ContextThread() Server protocol is 4:4 |
/usr$ sudo find ./ -name libpcsclite* ./share/doc/libpcsclite1 ./local/lib/x86_64-linux-gnu/libpcsclite.a ./local/lib/x86_64-linux-gnu/libpcsclite_real.so.1 ./local/lib/x86_64-linux-gnu/pkgconfig/libpcsclite.pc ./local/lib/x86_64-linux-gnu/libpcsclite.so.1 ./local/lib/x86_64-linux-gnu/libpcsclite_real.so ./local/lib/x86_64-linux-gnu/libpcsclite.so ./lib/x86_64-linux-gnu/libpcsclite.so.1 ./lib/x86_64-linux-gnu/libpcsclite.so.1.0.0 |
아마도 so 로더에서 /usr/lib 보다 /usr/local의 우선순위가 높다보니
$ cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf # Multiarch support /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu |
apt로 설치되는 녀석은 /usr/lib에 설치되는데 반해
/usr$ ls -al /lib/x86_64-linux-gnu/libpcsclite.so.1* lrwxrwxrwx 1 root root 20 6월 28 2023 /lib/x86_64-linux-gnu/libpcsclite.so.1 -> libpcsclite.so.1.0.0 -rw-r--r-- 1 root root 43072 6월 28 2023 /lib/x86_64-linux-gnu/libpcsclite.so.1.0.0 |
git으로 소스 빌드해서 설치해버리면 /usr/local/lib에 설치가 되어버리면서
pcsc_scan이 참조하는 라이브러리가 달라져서 발생하는 것으로 추측된다.
/usr/local/lib/x86_64-linux-gnu$ ls -al libpcsc* -rw-r--r-- 1 root root 185248 2월 25 15:40 libpcsclite.a lrwxrwxrwx 1 root root 16 2월 25 15:40 libpcsclite.so -> libpcsclite.so.1 -rwxr-xr-x 1 root root 32896 2월 25 15:40 libpcsclite.so.1 lrwxrwxrwx 1 root root 21 2월 25 15:40 libpcsclite_real.so -> libpcsclite_real.so.1 -rwxr-xr-x 1 root root 113936 2월 25 15:40 libpcsclite_real.so.1 lrwxrwxrwx 1 root root 15 2월 25 15:40 libpcscspy.so -> libpcscspy.so.0 -rwxr-xr-x 1 root root 45792 2월 25 15:40 libpcscspy.so.0 |
[링크 : https://ludovicrousseau.blogspot.com/2023/04/faq-pcsc-lite-and-scardeservicestopped.html]