나는 구축하려고 노력한다처음부터 리눅스사용자 정의 위치 또는 기존 CentOS 설치 내에서 루트 액세스가 필요하지 않습니다.
LFS
내 홈 디렉토리에 절대 경로를 설정 LFS_TGT=x86_64-lfs-linux-gnu
하고export PATH=${LFS}/tools/bin:$PATH
내장 binutils-2.28
:
../configure --prefix=${LFS}/tools \
--with-sysroot=$LFS \
--with-lib-path=${LFS}/tools/lib \
--target=$LFS_TGT \
--disable-nls \
--disable-werror
그 후 에 심볼릭 링크를 ${LFS}/tools/lib64
걸어 ${LFS}/tools/lib
커널 헤더를 설치 linux-2-6-32-8
하고 모든 것을 해당 디렉토리 에 gcc-4.9.2
빌드했습니다 .glibc-2.11.1
${LFS}/tools
그런 다음 를 입력했는데 x86_64-lfs-linux-gnu-ld -lc
다음 오류가 발생했습니다.
x86_64-lfs-linux-gnu-ld: cannot find -lc
cd ${LFS}/tools/lib64
그런 다음 x86_64-lfs-linux-gnu-ld libc.so
다음 오류가 발생합니다.
x86_64-lfs-linux-gnu-ld: cannot find ${LFS}/tools/lib/libc.so.6 inside ${LFS}
나는 이 오류를 이해할 수 없다. 파일 libc.so.6
이 올바른 위치에 있습니다.
--with-lib-path=${LFS}/tools/lib
구성 옵션은 환경 변수를 설정하지 않고 라이브러리를 찾도록 binutils-2.28
지시 한다고 생각합니다 . 그러나 이것은 사실이 아니다.x86_64-lfs-linux-gnu-ld
${LFS}/tools/lib
LD_LIBRARY_PATH
왜?
이를 설정 LD_LIBRARY_PATH
하면 ${LFS}/tools/lib
방금 구축한 항목과 CentOS의 기존 핵심 유틸리티를 포함하여 모든 항목에서 분할 오류가 발생합니다.
고쳐 쓰다:
나는 또한 다음을 시도했습니다.
../configure --prefix=${LFS}/tools \
--with-sysroot=$LFS \
--with-lib-path=tools/lib \ # this is changed
--target=$LFS_TGT \
--disable-nls \
--disable-werror
그러나 두 가지 오류가 모두 계속 발생합니다.
답변1
저도 같은 문제가 있어서 이틀동안 시도한 끝에 문제를 발견했습니다. 문제는 glibc에 있습니다. ld는 libc.so
파일을 찾아 링크를 시도하지만 파일은 링크할 파일을 링커에게 알려주는 링커 스크립트입니다. 내용은 다음과 같습니다:
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( ${LFS}/tools/lib/libc.so.6 ${LFS}/tools/lib/libc_nonshared.a AS_NEEDED ( ${LFS}/tools/lib/ld-linux-x86-64.so.2 ) )
gcc는 --sysroot=${LFS}
옵션을 ld에 전달하기 때문입니다. ld가 추가 ${LFS}
되고 ${LFS}/tools/lib/libc.so.6
링크를 시도하면 위의 오류가 발생합니다.
glibc_source_dir/Makerules line 1082
:
install: $(inst_libdir)/libc.so
$(inst_libdir)/libc.so: $(common-objpfx)format.lds \
$(common-objpfx)libc.so$(libc.so-version) \
$(inst_libdir)/$(patsubst %,$(libtype.oS),\
$(libprefix)$(libc-name)) \
$(+force)
(echo '/* GNU ld script';\
echo ' Use the shared library, but some functions are only in';\
echo ' the static library, so try that secondarily. */';\
cat $<; \
echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
'$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\
' AS_NEEDED (' $(rtlddir)/$(rtld-installed-name) ') )' \
) > [email protected]
mv -f [email protected] $@
glibc의 설치 대상은 모든 라이브러리를 설치하는데, $(inst_libdir)
not 과 관련된 파일을 작성할 때 사용됩니다 $(DESTDIR)$(prefix)
.$(libdir)
$(slibdir)
libc.so
$(prefix)
$(DESTDIR)
해결 방법: glibc를 구성한 --prefix=/tools
후 다음을 사용하여 설치해야 합니다.
DESTDIR=${LFS} make install
답변2
Centos용 컴파일러가 glibc-2.11을 빌드하기에는 너무 오래된 4.1.2이기 때문에 먼저 최신 버전의 컴파일러(크로스 컴파일이 아닌 호스트 아키텍처용 컴파일용 gcc-4.4.3)를 빌드해야 했습니다. . 그 후, 나는 이 새로운 컴파일러를 사용하여 "Linux from 스크래치 버전 6.6"에서 크로스 컴파일 툴체인을 구축했습니다. 지금까지 빌드에서는 나에게 아무것도 요구하지 않았습니다 sed
. 크로스 컴파일러를 설정한 다음 이를 사용하여 gcc 및 glibc의 최신 버전을 빌드할 것 같습니다.