Linux调试智能卡环境搭建(二),其中包含Linux编译链接动态库相关
以下所需要的部分離線資源已上傳CSDN資源pcsc、ccid、libusb
一、下載離線安裝包(注意安裝過后的就無法只下載了)
CentOS利用yum下載好rpm包,并離線安裝
1、聯網安裝好rpm包,并將下載好的包備好
#yum install --downloadonly --downloaddir=/home/samba samba其中samba 是要用yum安裝的安裝包,/home/samba是要存放下載的yum安裝包及其依賴包的保存路徑2、離線的機器上,在rpm所在的文件夾內,執行以下腳本
#rpm -Uvh --force --nodeps *.rpm (最好使用強制安裝,否則可能安裝不上)-ivh:安裝顯示安裝進度--install--verbose--hash -Uvh:升級軟件包--Update;使用方式:rpm -ivh [軟件包]。 ivh意思是軟件包管理器的選項,其中i表示安裝,v表示顯示安裝過程,h表示顯示進度。3、CentOS卸載軟件
# 查詢軟件列表 # rpm -qa | grep 軟件名 rpm -qa | grep mysql# 卸載軟件 # sudo yum remove 軟件名 sudo yum remove mysqlubuntu只下載不安裝deb包:
sudo apt-get install -d 包名這樣就只下載不安裝,下載的文件在目錄
ls /var/cache/apt/archives將軟件包拷貝到你所需要的地方,在該目錄執行
dpkg -i 包名 或者 dpkg --force-all -i *.deb (強制安裝)ubuntu 刪除軟件包
apt-get purge / apt-get --purge remove 刪除已安裝包(不保留配置文件)。 如軟件包a,依賴軟件包b,則執行該命令會刪除a,而且不保留配置文件 apt-get autoremove 刪除為了滿足依賴而安裝的,但現在不再需要的軟件包(包括已安裝包),保留配置文件。 apt-get remove 刪除已安裝的軟件包(保留配置文件),不會刪除依賴軟件包,且保留配置文件。note:
如果出現安裝卸載失敗,需要修復安裝
二、常用指令:
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:gcc-4.8.5 g++ -4.8.5
安裝gcc 和g++
前提連接互聯網可以先更新一下源:yum update 安裝gcc:yum install gcc 安裝g++: yum install gcc-c++centOS7默認GCC版本為4.8.5( Login as a root to install driver )登錄root用戶安裝驅動
1、聯網安裝libudev
on ubuntuapt-get install libudev-dev----------------------on centosyum install systemd-devel2、常規安裝 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不同版本來選擇:
3、安裝perl解釋器插件(可能有的系統缺少這個解釋器,ubuntu16.04不缺少,但是CentOS7缺少)
yum install perl-devel4、啟動pcsc服務 /usr/local/sbin/pcscd -adf 顯示ACR38信息即表示成功
如果識別不到可以插拔一下讀卡器
note:
CentOS可能沒有lsusb命令,需要安裝
四、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,支持C99configure: error: udev support requested but libudev header not installed看CSDN博客: https://blog.csdn.net/liuyan20092009/article/details/525772622、安裝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-libsystemdapt-get install libsystemd-dev3、安裝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服務
Linux動態庫相關:
一、 Linux 動態庫選擇順序指:
編譯程序時用到動態庫,該從那些地方查找,按照怎么樣的順序查找?
運行程序時需要動態庫,該從那些地方查找,按照怎么樣的順序查找?
二、gcc 編譯程序時查找SO順序如下:
gcc 編譯時參數-L指定的路徑
環境變量 LIBRARY_PATH
系統默認庫位置 /lib /usr/lib
三、Linux 程序運行時查找SO順序如下:
gcc 編譯時指定的運行時庫路徑 -Wl,-rpath
環境變量 LD_LIBRARY_PATH
ldconfig 緩存 /etc/ld.so.cache
系統默認庫位置 /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,以便程序加載運行時能夠自動找到需要的動態鏈接庫。
五、(很重要) -Wl,-rpath=
在編譯時添加運行時的庫路徑
-Wl,-rpath=/usr/local/lib是為程序添加一個運行時庫文件搜索路徑的命令,在使用gcc編譯鏈接時添加即可。
其中,有兩個單獨的部分-Wl和-rpath組成。
-Wl這個是gcc的參數,表示編譯器將后面的參數傳遞給鏈接器ld。請注意此處的W是大寫的。
-rpath1. 添加一個文件夾作為運行時庫的搜索路徑。在將ELF可執行文件與共享對象鏈接時使用此選項; 2. 在鏈接時,一些動態庫明確的鏈接了其他動態庫, 則-rpath選項也可用于定位這些鏈接的動態庫(沒太理解這個); 3. 在運行鏈接時,會優先搜索-rpath的路徑,再去搜索LD_RUN_PATH的路徑。總結
以上是生活随笔為你收集整理的Linux调试智能卡环境搭建(二),其中包含Linux编译链接动态库相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译安装PHP出现configure:
- 下一篇: mysql 数据分析的步骤_数据分析8个