寫在前面:在ubuntu下基於QEMU進行固件仿真時,遇到了 can't load library 'libpcre.so.1' 的問題,網上查找相關資料,應該是需要安裝一個PCRE庫就可以得到這個文件,但是要注意,這個文件是要用在32位的ARM架構的固件下的,所以需要交叉編譯。兩個注意的點:32bit,ARM。好的,接下來就是如何解決這個問題的過程。
1. 搭建arm-linux交叉編譯環境
這里補充兩個鏈接,arm-none-linux-gnueabi- 環境搭建,Ubuntu下安裝arm-linux-gnueabi-xxx編譯器。前者包含一些Linux解壓版、Linux安裝版、Windows解壓版、Windows安裝版等arm-none-linux-gnueabi-gcc的百度網盤下載鏈接;后者介紹了兩種安裝arm-linux-gnueabi-xxx的方法,總結來說就是以下兩種:
① 在Ubuntu系統是最新的前提條件下,使用apt-get命令即可;
sudo apt-get install gcc-arm-linux-gnueabi //安裝
arm-linux-gnueabi-gcc -v //檢查是否安裝成功
② 提供arm工具鏈官網:https://launchpad.net/gcc-arm-embedded,可以下載需要的版本,下載完成后,依照下面的步驟,即可完成安裝。
>>>>>>>>>>>>>>
首先搭建交叉編譯環境,使用4.4.3版本,參考鏈接:https://www.cnblogs.com/Dana-gx/p/10202658.html【包含arm-linux下載鏈接】
在/usr/local路徑下新建文件夾arm-linux-gcc(mkdir命令),將下載得到的文件arm-linux-gcc-4.4.3.tar.gz復制到該路徑下,並解壓縮:
1 sudo mkdir arm-linux-gcc 2 sudo chmod 777 arm-linux-gcc 3 cd arm-linux-gcc 4 sudo cp arm-linux-gcc-4.4.3.tar.gz路徑 ./ 5 sudo tar -zxvf arm-linux-gcc-4.4.3.tar.gz
交叉編譯鏈路徑/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3
修改環境變量,將arm-linux-gcc添加到PATH中。推薦以下方式:
修改/etc/bash.bashrc文件:
1 sudo -s 2 sudo gedit /etc/bash.bashrc 3 在最后加上export PATH=$PATH:/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin 4 保存,退出; 5 source /root/.bashrc //刷新環境變量使其生效 6 echo $PATH //輸出環境變量,如果顯示arm-linux-gcc的路徑,則環境變量添加成功 7 arm-linux-gcc -v //檢查arm-linux-gcc是否安裝正確
-v命令正常輸出如下:
其中,
1 --build=i386-build_redhat-linux-gnu 2 --host=i386-build_redhat-linux-gnu 3 --target=arm-none-linux-gnueabi 4 --prefix=/opt/FriendlyARM/toolschain/4.4.3
--build選項表示當前ubuntu系統的架構類型,使用arm-linux-gcc進行交叉編譯時,需要指定--host/--target選項為arm-none-linux-gnueabi,表示目標架構為ARM。
2. 下載安裝PCRE庫
在/usr/local/src路徑下:
1 //下載pcre-8.44 2 sudo wget https://netix.dl.sourceforge.net/project/pcre/pcre/8.44/pcre-8.44.tar.gz 3 //解壓縮 4 sudo tar -zxvf pcre-8.44.tar.gz 5 //進入源碼目錄 6 cd pcre-8.44 7 //編譯安裝pcre 8 sudo ./configure --build=i386-build_redhat-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --prefix=/usr/local/src/libpcre CC=/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc 9 sudo make 10 sudo make install
./configure命令中,--prefix選項表示pcre的安裝位置,也就是說,最后我們要去這個路徑下找需要的libpcre.so.1文件;CC選項指定編譯器,最好加上arm-linux-gcc的完整路徑,否則可能會出現can't find錯誤。【如果在make或者make install時出現了CXXLD錯誤,那么在./configure時,可以再加上CXX選項,如下所示】
1 CXX=/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-c++
如果在make時報錯:aclocal-1.16 is missing,那么見3中的解決方法。
3. 遇到問題“aclocal-1.16 is missing”
該問題需要安裝automake-1.16(注意版本對應)。在/usr/local/src路徑下:
1 //下載安裝包 2 sudo wget https://ftp.gnu.org/gnu/automake/automake-1.16.tar.gz 3 //解壓 4 sudo tar -xzvf automake-1.16.tar.gz 5 cd automake-1.16 6 //編譯安裝 7 sudo ./configure --build=i386-build_redhat-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi CC=/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc 8 sudo make 9 sudo make install
注意,automake也需要進行交叉編譯,保持架構一致。無需指定--prefix選項,安裝位置默認即可。
在執行./configure時報錯: error: Autoconf 2.65 or better is required. 解決辦法見4。
4. 遇到問題“缺少autoconf-2.65”
毫無疑問,現在需要安裝autoconf-2.65。在/usr/local/src路徑下:
1 //下載安裝包 2 sudo wget http://ftpmirror.gnu.org/autoconf/autoconf-2.65.tar.gz 3 //解壓 4 sudo tar -xzvf autoconf-2.65.tar.gz 5 cd autoconf-2.65 6 //編譯安裝 7 sudo ./configure --build=i386-build_redhat-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi CC=/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc 8 sudo make 9 sudo make install
在執行./configure時報錯,error: no acceptable m4 could be found. 解決辦法見5。
5. 遇到問題“缺少m4”
現在需要安裝m4,安裝版本在報錯時會給出提示,這里安裝m4-1.4.13版本。在/usr/local/src路徑下:
1 //下載安裝包 2 sudo wget http://ftp.gnu.org/gnu/m4/m4-1.4.13.tar.gz 3 //解壓 4 sudo tar -xzvf m4-1.4.13.tar.gz 5 cd m4-1.4.13 6 //編譯安裝 7 sudo ./configure --build=i386-build_redhat-linux-gnu --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi CC=/usr/local/arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc 8 sudo make 9 sudo make install
m4安裝完畢之后,再繼續./configure、make、make install剩下的autoconf-2.65和automake-1.16,最后將PCRE庫安裝完成。在/libpcre/lib文件夾中,可找到需要的libpcre.so.1文件。
通過file命令可知libpcre.so.1文件是一個鏈接文件,源文件為libpcre.so.1.2.12。
readelf -h命令查看libpcre.so.1.2.12文件:
目標文件32bit,架構為ARM。
最后將以上兩個文件一起復制到固件文件系統的lib文件夾下,可使用cp -a命令。
參考鏈接:
https://www.iteye.com/blog/chenzhou123520-1817563
https://cloud.tencent.com/developer/article/1430415