【问题标题】:Failed sanity check at LFS 5.7.Glibc-2.29LFS 5.7.Glibc-2.29 的完整性检查失败
【发布时间】:2019-07-26 11:02:23
【问题描述】:

我想在没有sudo 权限的情况下在CentOS v. 7.6.1810 上交叉编译LFS(我想在服务器上自定义我的环境)。一个问题是全球有很多包已经过时(例如,python 2.7、gcc 4.8.5、gmake 3.82)。

在这个设置中,我从LFS的第4章开始,到处更改PATH/tools/path/to/my/folder/tools(我相信我做得足够准确)。直到第 5.7 章,一切都很顺利。首先,Glibc 想要更新的 python 和 gmake。 因此我遵循了 5.27.1 和 5.30.1 的章节。

在这之后,一切都编译好了,我在the sanity check step 上被阻止了。我从sources/glibc/build文件夹中执行它,得到一个错误:

> echo 'int main(){}' > dummy.c
> $LFS_TGT-gcc dummy.c

/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc.so.6 inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc_nonshared.a inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/ld-linux-x86-64.so.2 inside /path/to/my/folder
collect2: error: ld returned 1 exit status

我检查了/path/to/my/folder/tools/lib/,所有想要的文件(crt1.ocrti.olibc.so.6libc_nonshared.ald-linux-x86-64.so.2)都在那里。

我尝试提供文件的符号链接,它适用于 crt1.ocrti.o,但不适用于其他文件。

> ln -s /path/to/my/folder/tools/lib/crt1.o crt1.o
> ln -s /path/to/my/folder/tools/lib/crti.o crti.o
> ln -s /path/to/my/folder/tools/lib/libc_nonshared.a libc_nonshared.a

/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc.so.6 inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc_nonshared.a inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/ld-linux-x86-64.so.2 inside /path/to/my/folder
collect2: error: ld returned 1 exit status

更新 1 现在我重新安装了旧版本 LFS (8.1),因此我从一开始就满足了所有先决条件。我再次从第 4 章开始,直到臭名昭著的检查才出现错误。 Tim 的建议有助于系统没有被破坏,但是分段错误不允许创建 a.out:

> echo 'int main(){}' > dummy.c
> LD_LIBRARY_PATH=/path/to/my/folder/tools/lib $LFS_TGT-gcc dummy.c
Segmentation fault (core dumped)
> readelf -l a.out | grep ': /path/to/my/folder/tools'
readelf: a.out: Error: No such file

受到类似问题LFS 7.2 glibc-2.16.0 make error 的启发,并尝试相应地更改LD_LIBRARY_PATH。它似乎不起作用。

> echo 'int main(){}' > dummy.c
> LD_LIBRARY_PATH=/path/to/my/folder/tools/libgcc/x86_64-lfs-linux-gnu/7.2.0 $LFS_TGT-gcc dummy.c
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc.so.6 inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/libc_nonshared.a inside /path/to/my/folder
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/8.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find /path/to/my/folder/tools/lib/ld-linux-x86-64.so.2 inside /path/to/my/folder
collect2: error: ld returned 1 exit status
> readelf -l a.out | grep ': /path/to/my/folder/tools'
readelf: a.out: Error: No such file

更新 2 我再次重新安装了 LFS (8.1),但这次我遵循了issue 中描述的步骤。另外,我使用了 cmets here 中描述的 -Xlinker --verbose 解决方案来检查 ld 日志。现在看来,它可能无法打开提到的库。仍然无法正常工作,但日志似乎发生了一些变化。

> LFS_TGT-gcc -Xlinker --verbose dummy.c
==================================================
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/crtbegin.o succeeded
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/crtbegin.o
attempt to open /tmp/ccRQA7iH.o succeeded
/tmp/ccRQA7iH.o
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libgcc.so failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libgcc.a succeeded
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libc.so failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libc.a failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/lib/../lib/libc.so failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/lib/../lib/libc.a failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/lib/libc.so failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/lib/libc.a failed
attempt to open /path/to/my/folder/path/to/my/folder/tools/x86_64-lfs-linux-gnu/lib64/libc.so failed
attempt to open /path/to/my/folder/path/to/my/folder/tools/x86_64-lfs-linux-gnu/lib64/libc.a failed
attempt to open /path/to/my/folder/tools/lib/libc.so failed
attempt to open /path/to/my/folder/tools/lib/libc.a failed
attempt to open /path/to/my/folder/path/to/my/folder/tools/x86_64-lfs-linux-gnu/lib/libc.so failed
attempt to open /path/to/my/folder/path/to/my/folder/tools/x86_64-lfs-linux-gnu/lib/libc.a failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libgcc.so failed
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/libgcc.a succeeded
attempt to open /path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/crtend.o succeeded
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/crtend.o
attempt to open crtn.o failed
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find -lc
/path/to/my/folder/tools/lib/gcc/x86_64-lfs-linux-gnu/7.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status

您能否给个建议,如何处理这个讨厌的ld 问题。我知道跳过 LFS 步骤是不好的。不幸的是,我没有办法解决这个问题,但我想尽可能升级我的本地环境。谢谢!

【问题讨论】:

    标签: c glibc linux-from-scratch


    【解决方案1】:

    我正在和你一样在不同的目录中编译 LFS。 我遵循了与您相同的步骤。并且得到了完全相同的结果。

    但我想我有一个提示,你没有提到:

    /path/to/my/folder/tools/bin/x86_64-lfs-linux-gnu-ld /path/to/my/folder/tools/lib/libc.so.6
    

    发出警告:

    x86_64-lfs-linux-gnu-ld:警告:找不到入口符号_start;没有设置起始地址

    希望这有助于发现问题。

    【讨论】:

    • 感谢我在这里并不孤单:) 在 Update 2 之后,似乎不需要 libc.so.6,甚至没有安装它,当我正在构建 glibc。现在,我在我的文件夹的根目录中提供了指向crtn.ocrt1.ocrti.o 的符号链接,并且只有cannot find -lc 错误仍然存​​在。人们说在这种情况下libc.a 图书馆不存在。一会儿,我会重写我的帖子。
    【解决方案2】:

    此命令将为整个 shell 更新 LD_LIBRARY_PATH

    export LD_LIBRARY_PATH=/path/to/my/folder/tools/lib
    

    您只想为一个命令更新它。试试这个:

    LD_LIBRARY_PATH=/path/to/my/folder/tools/lib $LFS_TGT-gcc dummy.c
    

    更新:那没用……试试这个怎么样?

    $LFS_TGT-gcc -L/path/to/my/folder/tools/lib dummy.c
    

    【讨论】:

    • 谢谢!我尝试了您的建议,但出现了同样的致命错误:Segmentation fault (core dumped) 现在我不知道该怎么办(
    • 我尝试了您的第二个建议,但也没有用。我自己做了一些功课,请参阅UPDATE 2
    • @gregoruar,对不起,我没有主意了。也许其他人可以提供帮助。
    【解决方案3】:

    从 gcc 脚本中检查这一行 --with-glibc-version=2.11 \ 中的 glibc 版本以及主机系统要求的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2018-08-16
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多