Sudo権限なしでCentOS v.7.6.1810でLFSをクロスコンパイルしたいです(サーバーで環境をカスタマイズしたい)。 1つの問題は、多くのパッケージが世界中で古くなっていることです(例:2.7、4.8.5、3.82 python
)。gcc
gmake
この設定では、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
と奇妙な分割エラーが発生します。創造は物を返すのに役立ちます。ls
cat
LD_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.html?version-check.sh
スクリプトを実行しましたか?本に記載されているバージョンと印刷されたすべてのバージョンを確認しましたか?
編集:特定のパッケージ(Pythonやgmakeなど)がホストシステムで古すぎて変更できない場合は、ユーザーのためにローカルソースからコンパイルしてインストールできます。prefix
構成中に以下を設定する必要があります。
./configure --prefix=$HOME
その後、いくつかの調整を行う必要があります。などを追加する必要$HOME/bin
がありますPATH
。