LFS 5.7.Glibc-2.29の完全性チェックに失敗しました。

LFS 5.7.Glibc-2.29の完全性チェックに失敗しました。

Sudo権限なしでCentOS v.7.6.1810でLFSをクロスコンパイルしたいです(サーバーで環境をカスタマイズしたい)。 1つの問題は、多くのパッケージが世界中で古くなっていることです(例:2.7、4.8.5、3.82 python)。gccgmake

この設定では、LFSの第4章から始めて、すべてのPATHを/ toolsから/ path / to / my / folder / toolsに変更しました(これは十分に正確に行われたと思います)。 5.7章まではすべてがうまく行われました。まず、GlibcはPythonとgmakeを更新したいと思います。したがって、私はセクション5.27.1と5.30.1に従いました。

その後、すべてがうまくコンパイルされ、完全性チェック段階で中断されました(http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html)。 source/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.o、crti.o、libc.so.6、libc_nonshared.a、ld-linux-x86-64.so)を確認しました。 2)そこに。

私はファイルへのシンボリックリンクを提供しようとしましたが、crt1.oとcrti.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

私は変更しようとしています。ただし、これを行うと、呼び出しやその他のツールを使用するLD_LIBRARY_PATHと奇妙な分割エラーが発生します。創造は物を返すのに役立ちます。lscatLD_LIBRARY_PATH=''

> export LD_LIBRARY_PATH=/path/to/my/folder/tools/lib
> ls
Segmentation fault (core dumped)
> export LD_LIBRARY_PATH=/path/to/my/folder/tools/lib64
> ls
Segmentation fault (core dumped)
> export LD_LIBRARY_PATH=''
> ls
...Dispalays content of the directory...

更新:これで、以前のバージョンの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

同様の質問に触発されてhttps://stackoverflow.com/questions/15928925/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

ldこの迷惑な問題を解決する方法を提案してもらえますか? LFSステップをスキップするのは良くないことを知っています。残念ながら、この問題を解決する方法はありませんが、可能であればローカル環境をアップグレードしたいと思います。ありがとうございます!

ベストアンサー1

本に記載されている手順を段階的に説明すると、LFSが機能しない可能性があります。ただし、ステップをスキップまたは並べ替えるなどの作業を実行する必要がある場合は、GNU Linuxはこの軽量バージョンでも複雑すぎるため、自分で解決する必要があります。

だから本に従ってください。その本は良い本です。間違えた場合は、本をもう一度読んで戻ってすべてを確認してください。

あなたは非順次Pythonとgmakeコンパイルを実行する必要があると書いています。なぜ?ホストシステムがLFS要件を満たしていない場合は機能しません。それでは、ホストにPython 3.4がありますか?http://www.linuxfromscratch.org/lfs/view/stable/chapter02/hostreqs.htmlversion-check.shスクリプトを実行しましたか?本に記載されているバージョンと印刷されたすべてのバージョンを確認しましたか?

編集:特定のパッケージ(Pythonやgmakeなど)がホストシステムで古すぎて変更できない場合は、ユーザーのためにローカルソースからコンパイルしてインストールできます。prefix構成中に以下を設定する必要があります。

./configure --prefix=$HOME

その後、いくつかの調整を行う必要があります。などを追加する必要$HOME/binがありますPATH

おすすめ記事