Ubuntu16(32bit)環境下交叉編譯PCRE庫


寫在前面:在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

https://blog.51cto.com/13402621/2355018?source=drh

https://blog.csdn.net/xie_jw/article/details/9173247


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM