LFS 5.7.Glibc-2.29에 대한 온전성 검사에 실패했습니다.

LFS 5.7.Glibc-2.29에 대한 온전성 검사에 실패했습니다.

Sudo 권한 없이 CentOS v.7.6.1810에서 LFS를 크로스 컴파일하고 싶습니다(서버에서 환경을 사용자 정의하고 싶습니다). 한 가지 문제는 많은 패키지가 전 세계적으로 오래되었다는 것입니다(예: 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.html? version-check.sh스크립트를 실행하셨나요 ? 책에 나와 있는 버전과 인쇄된 모든 버전을 확인하셨나요?

편집: 특정 패키지(예: Python 또는 gmake)가 호스트 시스템에서 너무 오래되어 변경할 수 없는 경우 사용자를 위해 로컬 소스에서 컴파일하고 설치해 볼 수 있습니다. prefix구성 중에 다음을 설정 해야 합니다 .

./configure --prefix=$HOME

그런 다음 몇 가지 조정을 해야 합니다. 등을 추가해야 $HOME/bin합니다 PATH.

관련 정보