首页 > 技术文章 > Ubuntu16(32bit)环境下交叉编译PCRE库

from-zero 2020-03-22 12:05 原文

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

推荐阅读