linux ARM 如何更新libc库

在进行嵌入是开发的时候,如果碰到 应用程序报告以下错误,

 

那么说明,你的嵌入式的系统 LIBC库版本过低。

这时候该怎么解决呢?

我再进行live555 开发的过程中就碰到了。

 这时候,你可能需要选择比较低版本的交叉编译器,或者要选择低版本的开源库。

但是除了以上方法之外,没有其他办法呢?比如更新ARM 上的LIBC库呢?

答案是肯定的。

在PC上如果想要更新LIBC库,很简单,网上一搜一大堆。这里就简单介绍一下:

一 PC上更新LINUX LIBC库

1. 查看LIBC库支持的版本 

strings /lib64/libc.so.6 |grep GLIBC2

2.  到 http://www.gnu.org/software/libc/libc.html  或 Index of /pub/gnu/libc下载你要的LIBC库。注意LIBC库不是越新越好。

3. 编译

tar xvf glibc-2.26.tar.gz
cd glibc-2.26
mkdir build
cd build
../configure --prefix=/usr/local/glibc-2.26  // 配置glibc并设置当前glibc-2.26安装目录
make -j4
make install
cp /usr/local/glibc-2.26/lib/libc-2.26.so /lib64/libc-2.26.so 
mv /lib64/libc.so.6 /lib64/libc.so.6.bak
LD_PRELOAD=/lib64/libc-2.26.so ln -s /lib64/libc-2.26.so /lib64/libc.so.6

4. 如果最后一步报错,使用下面命令把软链接改回来:

LD_PRELOAD=/lib64/libc-2.26.so ln -s /lib64/libc-2.26.so /lib64/libc.so.6

5. 最后在查询以下libc 版本是否更新成功

 二 嵌入式ARM 要如何更新LIBC库呢

嵌入式arm更新LIBC最直接的方法,当然是重新制作根文件系统了。但除了重新制作根文件系统之外就没有其他办法了吗?答案是否定的。

 嵌入式ARM 要更新LIBC网上介绍的很少,我刚开始也碰到了很多很多坑。经过很多天的摸索现在在这里分享一下几个办法。

因为嵌入式ARM 由于性能原因,一般是不会有gcc 之类的交叉编译器的。虽然arm下没安装交叉编译器,但是并不代表不能安装。

下面我介绍一下嵌入式ARM更新LIBC的2种方法:

1.1 直接下载LIBC库,到嵌入式ARM中编译。(不建议)

   如果你的开发板用的是Ubunt的根文件系统,那么恭喜你,你要更新LIBC库就变得很简单。以下只介绍Ubuntu根文件系统的更新方式。

   1. 安装gcc编译器 输入apt-get install build-essential 

   2. 下载 libc 库

  3. 编译安装(和PC安装没有什么区别),但是编译时间很长笔者编译了1个多小时才编译完成。

tar -zxvf glibc-2.26.tar.gz
cd glibc-2.26
mkdir build && cd build
apt-get install gawk bison -y
…/configure --prefix=/usr/local #会报错,让你加个参数
make 
make install

1.2 从你PC上直接拷贝你交叉编译器的动态库文件到你的开发板下

   1.  拷贝PC上使用的交叉编译器的 arm-linux-gnueabihf/libc/lib 目录下的所有 *so*文件到你ARM板上的/lib 目录或 /lib/arm-linux-gnueabihf/ 目录下:(TIPS小技巧,可以先把这些文件拷贝在一起然后在一并更新到开发板)

先把所有交叉编译工具的库先拷贝出来备用(如果直接拷贝将导致arm开发板直接crash)

cd /workdir/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib
cp *so* /arm/lib/arm-linux-gnueabi/ -d     //-d 代表拷贝软连接

 2. 拷贝PC上使用的arm-linux-gnueabihf/lib/ 目录下的所有 *so*到开发板上

cd /workdir/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/lib/
cp *so* /nfs/tmpfs/arm2.26-gcc -d 

3. 拷贝PC使用的交叉编译工具的arm-linux-gnueabihf/libc/usr/lib 的所有 *so* 文件到开发板上

cd /workdir/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/lib
cp *so* /nfs/tmpfs/2.26-usr-lib -d

4. 更新开发板的动态链接库,

要更新动态链接库,那么必须推出ARM开发板当前运行的系统和跟文件系统。笔者采用的是nfs根文件系统更新ARM上的库。

4.1 进入Uboot 修改默认启动,从nfs启动Linux rootfs。

4.2 启动Linux后,在终端输入以下命令挂载跟文件系统和MMC的根文件系统。

mount -t nfs -o nolock 192.168.1.210:/nfs/tmpfs /mnt
mkdir /mnt/sd
mount /dev/mmcblk0p2 /mnt/sd 
cd /mnt

 

 4.3 为了防止更新错误,建议把 MMC上的 /lib  /usr/lib  目录下的所有文件都备份一份

4.4  在ARM终端上执行命令开始拷贝库 

cp /mnt/arm2.26-gcc/*so* /mnt/sd/lib/arm-linux-gnueabihf/ -d -rf
cp /mnt/2.26-usr-lib/*so* /mnt/sd/usr/lib/arm-linux-gnueabihf -d -rf

4.5 修改ld-linux-armhf.so.3 软连接, 用ls -l 查看 ld-linux-armhf.so.3 还是指向旧的libc库。

 

cd /mnt/sd/lib
rm -f ld-linux-armhf.so.3 
ln -s arm-linux-gnueabihf/ld-2.26.so ld-linux-armhf.so.3

 修改完后执行 sync 后,即可重新启动系统。

重启后用 strings /lib/arm-linux-gnueabihf/libc.so.6 | grep GLIBC_  即可查看LIBC的版本是否更改成功。

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

harbap

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值