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

那么说明,你的嵌入式的系统 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的版本是否更改成功。

linux ARM 如何更新libc库相关推荐

  1. linux clamav 离线更新病毒库

    到官网下载daily.cvd,地址为每天的病毒库下载地址 将daily.cvd拷贝到对应的目录中.默认为/var/lib/clamav/目录. 执行clamdscan --reload.它会通知cla ...

  2. Linux服务器安装更新字体库

    Linux centos7安装更新字体库 1.查看已有字体 [root@hcg chinese]# fc-list -bash: fc-list: command not found 2.没有字体库, ...

  3. linux封装函数,libc库和封装函数 | 求索阁

    Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1)libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准的 ...

  4. Linux的libc库

    Linux的libc库 文章目录 Linux的libc库 0x00 libc 0x01 Ubuntu 0x02 CentOS 0x03 下载libc源码 0x00 libc libc是Standard ...

  5. linux头文件和库在libc里,libc库和系统调用

    Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1. libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准 ...

  6. arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较

    原标题:嵌入式Linux的OTA更新,现有更新系统的比较 在基本原理和实现文章中,我们讨论了嵌入式Linux更新系统的基础和实现.在这里,我们讨论了一些现成的开源更新系统,这些系统现在可以与您的Emb ...

  7. Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题

    Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...

  8. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

  9. Linux快速入门之 静态库和动态库 (07)

    文章目录 7.静态库和动态库 7.1 Linux下静态库 7.1.1生成静态库 7.1.2静态库使用 7.2 Linux下动态库 7.2.1 生成动态库 7.2.2 制作动态库 7.2.3 动态库的使 ...

最新文章

  1. 面经:什么是Transformer位置编码?
  2. js过滤HTML标签以及空格
  3. php mysql 登录注销_PHP与MYSQL实现用户登录注销
  4. 原生JS封装时间运动函数
  5. PWN-PRACTICE-BUUCTF-1
  6. Linux DVD 转 MP4 – HandBrake – Copy a DVD to MP4 or MKV file
  7. 提高开发效率,eclipse的常用快捷键、旁门左道、系统错误小贴士
  8. Spark on Yarn查看删除日志
  9. 导入导出mysql数据库命令
  10. 网页下载CAB文件总结
  11. 【UML】——为什么要使用UML
  12. 我与阿里巴巴集团副总裁、阿里云智能数据库事业部总负责人在阿里云官网同框啦
  13. 电力行业数据安全解决方案
  14. linux系统下/etc目录的理解
  15. 十六进制颜色与RGB颜色转换
  16. 解决LaTeX中的\pdfendlink ended up in different nesting level than \pdfstartlink.问题
  17. 《写给大家看的设计书》(第四版)分享
  18. ASR语音转文字模型——项目落地
  19. 小能手英语口语学习笔记
  20. ORB_SLAM2及其他SLAM精度测评

热门文章

  1. win7无损分区和调整合并
  2. html5 js单击隐藏显示,《锋利的JS》 之 单击显示隐藏
  3. 移动原生App开发和HTML 5开发,你更看好哪个?
  4. 详解CSS伪类与伪元素
  5. 特征检测和特征匹配方法
  6. Positive Grid BIAS FX Desktop v2.4.4 Elite VR WiN 吉他效果器插件
  7. 人工智能数学基础——最优化方法
  8. U盘使用记录删除方法
  9. 如何控制上网行为,空明云上网行为管理软件可以做什么?
  10. 视频号冠名崔健演唱会太野了4600万观看