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的版本是否更改成功。
linux ARM 如何更新libc库相关推荐
- linux clamav 离线更新病毒库
到官网下载daily.cvd,地址为每天的病毒库下载地址 将daily.cvd拷贝到对应的目录中.默认为/var/lib/clamav/目录. 执行clamdscan --reload.它会通知cla ...
- Linux服务器安装更新字体库
Linux centos7安装更新字体库 1.查看已有字体 [root@hcg chinese]# fc-list -bash: fc-list: command not found 2.没有字体库, ...
- linux封装函数,libc库和封装函数 | 求索阁
Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1)libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准的 ...
- Linux的libc库
Linux的libc库 文章目录 Linux的libc库 0x00 libc 0x01 Ubuntu 0x02 CentOS 0x03 下载libc源码 0x00 libc libc是Standard ...
- linux头文件和库在libc里,libc库和系统调用
Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1. libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准 ...
- arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较
原标题:嵌入式Linux的OTA更新,现有更新系统的比较 在基本原理和实现文章中,我们讨论了嵌入式Linux更新系统的基础和实现.在这里,我们讨论了一些现成的开源更新系统,这些系统现在可以与您的Emb ...
- Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题
Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...
- Linux ARM交叉编译工具链制作过程
一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...
- Linux快速入门之 静态库和动态库 (07)
文章目录 7.静态库和动态库 7.1 Linux下静态库 7.1.1生成静态库 7.1.2静态库使用 7.2 Linux下动态库 7.2.1 生成动态库 7.2.2 制作动态库 7.2.3 动态库的使 ...
最新文章
- 面经:什么是Transformer位置编码?
- js过滤HTML标签以及空格
- php mysql 登录注销_PHP与MYSQL实现用户登录注销
- 原生JS封装时间运动函数
- PWN-PRACTICE-BUUCTF-1
- Linux DVD 转 MP4 – HandBrake – Copy a DVD to MP4 or MKV file
- 提高开发效率,eclipse的常用快捷键、旁门左道、系统错误小贴士
- Spark on Yarn查看删除日志
- 导入导出mysql数据库命令
- 网页下载CAB文件总结
- 【UML】——为什么要使用UML
- 我与阿里巴巴集团副总裁、阿里云智能数据库事业部总负责人在阿里云官网同框啦
- 电力行业数据安全解决方案
- linux系统下/etc目录的理解
- 十六进制颜色与RGB颜色转换
- 解决LaTeX中的\pdfendlink ended up in different nesting level than \pdfstartlink.问题
- 《写给大家看的设计书》(第四版)分享
- ASR语音转文字模型——项目落地
- 小能手英语口语学习笔记
- ORB_SLAM2及其他SLAM精度测评