5.9. Binutils-2.34 - 2단계

Binutils 패키지는 링커, 어셈블러 및 객체 파일을 처리하기 위한 기타 도구를 포함한다.

예상 빌드 시간: 1.1 SBU
필요 디스크 공간: 651 MB

5.9.1. Binutils 설치

다시 별도의 빌드 디렉토리를 생성한다:

mkdir -v build
cd       build

Binutils 컴파일을 준비한다:

CC=$LFS_TGT-gcc                \
AR=$LFS_TGT-ar                 \
RANLIB=$LFS_TGT-ranlib         \
../configure                   \
    --prefix=/tools            \
    --disable-nls              \
    --disable-werror           \
    --with-lib-path=/tools/lib \
    --with-sysroot

새 Configure 옵션들의 의미:

CC=$LFS_TGT-gcc AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib

이것은 실사용할 Binutils의 네이티브 빌드이기 때문에, 이 옵션을 설정하여 빌드 시스템으로 하여금 호스트 시스템이 아닌 크로스 컴파일러와 관련 도구들을 사용하게끔 한다.

--with-lib-path=/tools/lib

Binutils를 컴파일하는 동안 라이브러리 검색 경로를 지정하도록 configure 스크립트에 지시해서 /tools/lib가 링커에 전달되도록 한다. 이렇게 해서 링커가 호스트의 라이브러리 디렉토리를 검색하는 것을 방지할 수 있다.

--with-sysroot

기본(존재하지 않는) sysroot 디렉토리 /tools/$LFS_TGT/sys-root를 정의한다. 링커의 명령줄에 명시된 다른 공유 객체에 필요한 공유 객체를 찾을 때 유용하다. 이러한 객체들은 <sysroot>/etc/ld.so.conf에 나열된 디렉토리에서 검색되고, 찾지 못하면, 링커 검색 경로로 검색된다. 만약 이 옵션이 설정되지 않으면, 호스트의 /etc/ld.so.conf가 사용되고, 그러면 프로그램이 호스트의 라이브러리에 연결될 수 있으며 이는 우리의 목적에 부합하지 않는다.

패키지를 컴파일한다:

make

패키지를 설치한다:

make install

이제 다음 장의 링커 재조정 단계를 위한 준비를 한다:

make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin

Make 인자들의 의미:

-C ld clean

ld 하위 디렉토리에서 컴파일된 모든 파일을 제거한다.

-C ld LIB_PATH=/usr/lib:/lib

ld 하위 디렉토리의 모든 것을 재빌드한다. 명령줄에 LIB_PATH Makefile 변수를 지정하면 임시 도구의 기본값을 무시하고 올바른 최종 경로를 가리킬 수 있다. 이 변수의 값이 링커의 기본 라이브러리 검색 경로이다. 이 준비사항은 다음 장에서 쓰인다.

이 패키지에 대한 자세한 정보는 6.18.2절. “Binutils의 내용.”에서 찾을 수 있다.