Ubuntu下安装并使用pcsclite

linux安装并使用pcsclite库,当然可以使用最直接的方法,先下载源码,然后编译并安装,这种方式很普遍,但很繁琐,不仅需要下载pcsc的源码,还要下载所有依赖的库源码,并且都要编译安装。

我接下来介绍的方式比较简单。

1、下载deb包

Ubuntu其实已经做好了pcsclite的安装包了,只需要下载下来即可 https://launchpad.net/ubuntu/+source/pcsc-lite/,进入到此网站后,显示了可以下载的pcsclite版本(如下图)。自己所使用的Ubuntu版本不同需要下载版本也不同。我使用的是14.04,经过两次尝试,发现1.8.10-1ubuntu1这个版本可以成功安装。

点击1.8.10-ubuntu1,进入下载页面

如上图所示,第一个红框内下载的是源码,第二个红框内下载的就是deb包,这里有四个下载链接,分别下载四个deb包。我的Ubuntu是14.04版本32位的,因此下载了这四个:libpcsclite1_1.8.10-1ubuntu1_i386.deb、libpcsclite-dev_1.8.10-1ubuntu1_i386.deb、libpcsclite1-dbg_1.8.10-1ubuntu1_i386.deb、pcscd_1.8.10-1ubuntu1_i386.deb

2、安装pcsclite的deb包

将这个四个deb文件放在同一个目录下,然后在终端命令行输入:sudo dpkg -i *.deb

扫描二维码关注公众号,回复: 11486829 查看本文章

会出现这样的错误提示:

  Package libccid is not installed.
  Package pcsc-ifd-handler is not installed.
这是因为安装包依赖libccid,而当前操作系统内没有安装,因此需要手动安装,我采用了这种超级简单的方式安装:

在终端命令行输入:sudo apt-get install libccid

此时libccid已经装好了,再次执行:sudo dpkg -i *.deb

pcsclite也就装好了。

是不是超级简单。

3、测试pcsclite

将pcsc插在主机上,进行pcsclite库测试。

pcsclite源码中提供了一个demo程序,位置在:pcsc-lite-1.8.10\doc\example\pcsc_demo.c,这个源码里有些错误,需要改正一下。

错误1:PCSC_ERROR没有定义,在源码中加入以下代码。

#define PCSC_ERROR(rv, info)           \
    if (rv != SCARD_S_SUCCESS)         \
    {                                  \
        printf("%s %lX\n", info, rv);  \
        return EXIT_FAILURE;           \
    }

错误2:无法找到pcsclite.h头文件。

仔细调试会发现pcsclite.h是在winscard.h中引的头文件。其实这两个头文件在同一个目录,都是在安装pcsclite库时,自动放到系统目录中了。

你会纳闷:winscard.h都能找到pcsclite.h却找不到。仔细观察你会发现demo程序中是这样引的头文件:#include <PCSC/winscard.h>,为winscard.h中是这样的引的头文件:#include <pcsclite.h>。

通过仔细搜寻,这些头文件在这个位置:/usr/include/PCSC,那就很容易理解了,编译自动搜寻的头文件目录是/usr/include。并没有PCSC这个目录,因此<PCSC/winscard.h>就能引用成功,而<pcsclite.h>却找不到。

找到原因,就很容易解决了,我的解决方法是:在编译的时候在头文件搜索路径中添加这个路径即可。

错误3:pcsclite库中提供的函数都无法找到。

这个原因和上一个错误原因类似。其实都是文件不是在标准搜索路径导致的。pcsclite动态库位置在/usr/lib/i386-linux-gnu/libpcsclite.so。解决办法是:在编译的时候在动态库文件搜索路径中添加这个路径即可。

错误4:SCardListReaders()函数执行错误。

出现这个错误,这说明,pcsclite提供的demo程序你已经成功运行起来了。这个函数是枚举当前系统中识别到的pcsc读卡器。但明明插上了读卡器,为什么没有枚举出来了,原因只有一个,虽然你插上了你的读卡器,但是系统没有识别到。没有识别到的原因其实就是你没有安装libusb这个usb设备库。

4、安装libusb库

老套路:下载libusb源码包(libusb-1.0.22.tar.bz2),解压,编译,安装。

但是却发现你在执行源码目录下的configure时,出现这样的错误:

udev support requested but libudev not installed

因为libusb依赖libudev库,还需要安装libudev库。

安装liudev库就比较简答了,使用命令行就行了: sudo apt-get install libudev-dev

安装成功继续安装libusb了,

./configure

make

make install

安装好了之后回到pcsclite的demo程序,编译运行发现,枚举读卡器的函数,正确获取到了你的读卡器名称。

 

猜你喜欢

转载自blog.csdn.net/Kernel_Heart/article/details/81559485