[A40i-源码构建] fakeroot: preload library 'libfakeroot.so' not found, aborting.

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分钟左右即可。

posted @ 2023-03-18 12:53  邪恶法师  阅读(502)  评论(0编辑  收藏  举报