使用的是forlinx给的vmware15–ubuntu18镜像
fakeroot: preload library `libfakeroot.so' not found, aborting.
查看linux-3.10/scripts/build.sh
第298行:
../scripts/build_rootfs.sh e ./$RAMFS_TARGET > /dev/null
翻译过来就是:
../scripts/build_rootfs.sh e ./rootfs.cpio.gz > /dev/null
,找到build_rootfs.sh
,
发现最终指向函数extract_rootfs()
,而主要是在命令 fakeroot cpio -i
出错的。
接着在命令行(pwd=linux-3.10/output/
)执行/home/forlinx/work/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/fakeroot cpi -h
发生如下错误:
fakeroot: preload library 'libfakeroot.so' not found, aborting.
与编译一致,那么这个应该是构建工具的错误,现在需要知道上面使用的fakeroot
是交叉编译的fakeroot
,还是普通的主机的fakeroot
。使用命令file lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/fakeroot
,发现只是shell脚本,那么打开该文件可以看到命令行。
if [ -n "$PATHS" ]
then
for dir in `echo $PATHS | sed 's/:/ /g'`
do
if test -r "$dir/$LIB"
then
libfound=yes
ABSLIB="$dir/$LIB"
fi
done
else
if test -r "$LIB"
then
libfound=yes
ABSLIB="$LIB"
fi
fi
这里打印了一下:
$LIB=libfakeroot.so
$PATH=/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib:
/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib64/libfakeroot:
/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib32/libfakeroot
也就是说在上面几个目录寻找libfakeroot
,但是我用find -name libfakeroot
发现我的目录是:
【我A40i源代码位置】/out/sun8iw11p1/linux/common/buildroot/host/usr/lib/libfakeroot.so
也就是说lib
文件存在,问题在于:【我A40i源代码位置】与/root/workspace/allwinner/A40i/bsp/lichee
这一段不匹配。
那么文件有,位置不对就简单了。猜测可能是使用的pwd
生成的脚本文件,做如下操作:
1. 把代码移动到和上面一致的目录
2. 重新编译buildroot(挺难的)
3. 修改out所有文件里只有有该目录的
这里我选择的是:2
,删除out
目录,然后在命令行输入./build.sh -m buildroot
等待1小时30分钟左右即可。