RK3399环境搭建----glibc2.29编译

硬件:firefly-RK3399-JD4

软件:ubuntu18.04

需求:在RK3399开发板上进行在线调试。

调试需要用到GDB,之前拿到的gdb运行的时候报错:

 提示libm.so.6缺少GLIBC_2.29.

看了一下我拿到的gdb,里面确实有两个函数用到了GLIBC_2.29

 

 而我本地的libm.so.6最高支持GLIBC_2.27

怎么办呢,首先想到的就是更新一下GLIBC到2.29版本,但是GLIBC无法通过apt-get install进行安装,只能下载源码进行make install 。

于是下了2.29的glibc代码

tar -zxvf glibc-2.29.tar.gz
cd glibc-2.23
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make

然而很快就报错了。

 搜了半天在/usr/include/aarch64-linux-gnu/asm里面找到了unistd.h,但是为啥编译的时候找不到呢,看build下生成的config.make文件:

defines = 
sysheaders = /usr/include
sysincludes = -nostdinc -isystem /usr/lib/gcc/aarch64-linux-gnu/7/include -isystem /usr/lib/gcc/aarch64-linux-gnu/7/include-fixed -isystem /usr/include
c++-sysincludes =  -isystem /usr/include/c++/7 -isystem /usr/include/aarch64-linux-gnu/c++/7 -isystem /usr/include/c++/7/backward
c++-cstdlib-header = /usr/include/c++/7/cstdlib
c++-cmath-header = /usr/include/c++/7/cmath
c++-bits-std_abs-h = /usr/include/c++/7/bits/std_abs.h

这些应该就是设置include文件的,于是在sysincludes后面加上了/usr/include/aarch64-linux-gnu。果然这个错误没有了。但很快又出现了另外一个错误:

 找不到setfsuid.o,是stamp.o需要的,搜了一下stamp.o在build下每个文件夹都有,不知道是干嘛的,setfsuid搜了一下是一个syscall接口,glibc里每个syscall编出来都以.o的形式,但是又找不到对应的.c。不知道怎么产生.o的,有的syscall函数是有对应的.c的。在sysd-syscalls文件里可以看到相关的配置。为什么会产生不了呢?而且在misc下面已经产生了一下syscall对应的.o,比如seteuid.o,sbrk.o,sethostid.o,setegid.o,setreuid.o等等,为什么唯独setfsuid.o产生不了?百思不得其解!折腾了半天也没搞定。我在想如果放到x64系统上编译看看会是什么样的情况,于是找了一台Ubuntux64的机器,同样编译2.29版本,果然没有任何问题,连前面的unistd.h的错误都没有报,setfsuid.o也产生了。好奇怪,难道aarch64不行?后来发现我configure的时候用的参数有不一样的。RK3399上用的是:../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

而X64上我用的是:../configure --prefix=/usr/local/glibc

难道跟这个有关,我把两种情况下生成的config.make对比了一下。

主要的差异如下:(左边是报错的,右边是没有报错的)

 

 

 我比较怀疑是include头文件的那一部分导致,什么都不配的configure,头文件的设置是空的。

于是我又在RK3399上用../configure --prefix=/usr/local/glibc试了一下,果然编译通过了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值