0
点赞
收藏
分享

微信扫一扫

Linux调试智能卡环境搭建(二),其中包含Linux动态库相关

_LEON_ 2022-01-23 阅读 61

以下所需要的部分资源已上传CSDN资源

一、CentOS下载离线安装包(注意安装过后的就无法只下载了)

CentOS利用yum下载好rpm包,并离线安装

1、联网安装好rpm包,并将下载好的包备好

#yum install --downloadonly --downloaddir=/home/samba  samba

其中samba 是要用yum安装的安装包,/home/samba是要存放下载的yum安装包及其依赖包的保存路径

2、离线的机器上,在rpm所在的文件夹内,执行以下脚本

#rpm -Uvh --force --nodeps *.rpm

3、CentOS卸载软件

# 查询软件列表
# rpm -qa | grep 软件名
rpm -qa | grep mysql
 
# 卸载软件
# sudo yum remove 软件名
sudo yum remove mysql
二、常用指令:
yum install opensc
opensc-tool --list-readers(重启才生效)

枚举当前PC中的读卡器    opensc-tool --list-readers   (前提已经安装openSC工具) 

枚举PC中的USB设备       sudo lsusb 

启动pcsc服务            /usr/local/sbin/pcscd -adf   (前提已经安装pcsc-lite)
						显示出如下类似信息则为安装成功
						00017575 pcscdaemon.c:518:main() pcsc-lite 1.8.1 daemon ready.
						
重启PCSC服务            sudo service pcscd restart


更换gcc版本             update-alternatives --config gcc
三、CentOS环境安装:

Linux环境:CentOS7 gcc-4.8.5 g+±4.8.5

1、安装libudev

on ubuntu

apt-get install libudev-dev

----------------------

on centos

yum install systemd-devel

2、常规安装 libusb-1.0.21.tar.bz2 、pcsc-lite_1.8.23.orig.tar.bz2、ccid_1.4.36.orig.tar.bz2

安装CCID时,需要指定libusb和PCSC的路径:
根据libusb不同版本来选择:

./configure PCSC_CFLAGS="-I/usr/local/include/PCSC" LIBUSB_CFLAGS="-I/usr/local/include/libusb-1.0" LIBUSB_LIBS="-L/usr/local/lib -lusb-1.0" --enable-usbdropdir="/usr/local/lib/pcsc/drivers"   PCSC_LIBS="-L/usr/local/lib -lpcsclite"

./configure PCSC_CFLAGS="-I/usr/local/include/PCSC" LIBUSB_CFLAGS="-I/usr/local/include/libusb" LIBUSB_LIBS="-L/usr/local/lib -lusb" --enable-usbdropdir="/usr/local/lib/pcsc/drivers"   PCSC_LIBS="-L/usr/local/lib -lpcsclite"

3、安装perl解释器插件(可能有的系统缺少这个解释器,ubuntu16.04不缺少,但是CentOS7缺少)

yum install perl-devel

4、启动pcsc服务 /usr/local/sbin/pcscd -adf 显示ACR38信息即表示成功

如果识别不到可以插拔一下读卡器

四、ubuntu安装一般步骤:

Ubuntu编译环境:

Linux 系统:ubuntu16.04
gcc版本: gcc-4.7.4 g+±4.7.4

如果使用支持PCSC的读卡器,需要安装libusb ccid pcsc-lite 驱动

1、安装libusb

 # tar zxvf  libusb-0.1.12.tar.gz 
 # cd libusb-0.1.12  
 # chmod +x configure                        
 # ./configure                             
 # make                                    
 # make install          ( Login as a root to install driver )     
可能出现以下错误及解决办法:
configure: error: compiler with C11 support is required to build libusb

更换gcc 5.4,更换高版本gcc,或者下载使用libusb-1.0.21.tar.bz2,支持C99

configure: error: udev support requested but libudev header not installed

看CSDN博客:
https://blog.csdn.net/liuyan20092009/article/details/52577262

2、安装pcsc-lite

 # tar zxvf  pcsc-lite-1.9.1.tar.gz 
 # cd pcsc-lite-1.9.1.tar.gz 
 # chmod +x configure 
 # ./configure                             
 # make                                    
 # make install          (Login as a root to install driver) 
错误及解决办法:
configure: error: install libsystemd-dev or use --disable-libsystemd

apt-get install libsystemd-dev

3、安装ccid

 # tar zxvf  ccid_1.4.36.orig.tar.gz 
 # cd ccid-1.4.36  
 # ./configure                             
 # make                                    
 # make install          (Login as a root to install driver) 

4、
最后启动pcsc服务

 /usr/local/sbin/pcscd 
 或者 /usr/local/sbin/pcscd -adf

Linux动态库相关:

一、 Linux 动态库选择顺序指:

  1. 编译程序时用到动态库,该从那些地方查找,按照怎么样的顺序查找?

  2. 运行程序时需要动态库,该从那些地方查找,按照怎么样的顺序查找?

二、gcc 编译程序时查找SO顺序如下:

  1. gcc 编译时参数-L指定的路径

  2. 环境变量 LIBRARY_PATH

  3. 系统默认库位置 /lib /usr/lib

三、Linux 程序运行时查找SO顺序如下:

  1. gcc 编译时指定的运行时库路径 -Wl,-rpath

  2. 环境变量 LD_LIBRARY_PATH

  3. ldconfig 缓存 /etc/ld.so.cache

4 系统默认库位置 /lib /usr/lib

四、LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下:

LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH

LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH

举个例子,我们开发一个程序,经常会需要使用某个或某些动态链接库,为了保证程序的可移植性,可以先将这些编译好的动态链接库放在自己指定的目录下,然后按照上述方式将这些目录加入到LD_LIBRARY_PATH环境变量中,这样自己的程序就可以动态链接后加载库文件运行了。

区别与使用:

开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。

发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。

举报

相关推荐

0 条评论