linuxfromscratch:12.1:089-binutils-2.42

Linux From Scratch - Version 12.1-systemd
Chapter 8. Installing Basic System Software
이전 위로 / 처음으로 다음
PkgConf-2.1.1 GMP-6.3.0

Binutils 패키지에는 링커, 어셈블러 및 기타 객체 파일 처리를 위한 도구가 포함되어 있습니다.

  • 빌드 시간: 2.2 SBU
  • 디스크 공간: 2.7 GB

Binutils 문서에서는 별도의 디렉터리에서 빌드하는 것을 권장합니다.

mkdir -v build
cd       build

Binutils 컴파일을 준비합니다.

../configure --prefix=/usr       \
             --sysconfdir=/etc   \
             --enable-gold       \
             --enable-ld=default \
             --enable-plugins    \
             --enable-shared     \
             --disable-werror    \
             --enable-64-bit-bfd \
             --with-system-zlib  \
             --enable-default-hash-style=gnu

configure 옵션 설명

  • –enable-gold
    gold 링커를 빌드하고 ld.gold(기본 링커와 함께)로 설치합니다.
  • –enable-ld=default bfd 링커를 빌드하고 ld(기본 링커)와 ld.bfd로 설치합니다.
  • –enable-plugins
    링커에 대한 플러그인 지원을 활성화합니다.
  • –with-system-zlib 소스에 포함된 버전을 빌드하는 대신 시스템에 설치된 zlib 라이브러리를 사용합니다.

패키지를 컴파일합니다.

make tooldir=/usr

make 옵션 설명

  • tooldir=/usr
    일반적으로 tooldir(실행 파일이 최종적으로 위치할 디렉터리)는 $(exec_prefix)/$(target_alias)로 설정됩니다. 예를 들어, x86_64 시스템에서는 /usr/x86_64-pc-linux-gnu로 확장됩니다. 이 시스템은 사용자 지정 시스템이므로 /usr의 이 대상별 디렉터리는 필요하지 않습니다. 시스템을 교차 컴파일하는 데 사용하는 경우(예: Intel 시스템에서 PowerPC 시스템에서 실행할 수 있는 코드를 생성하는 패키지를 컴파일하는 경우) $(exec_prefix)/$(target_alias)를 사용할 수 있습니다.

중요
이 섹션의 Binutils 테스트 스위트는 매우 중요합니다.
어떤 상황에서도 건너뛰지 마세요.

결과를 테스트합니다.

make -k check

실패한 테스트 목록을 보려면 다음을 실행합니다.

grep '^FAIL:' $(find -name '*.log')

enable-default-pie–enable-default-ssp 옵션이 GCC에 설정되어 있을 때 gold 테스트 스위트에서 12개의 테스트가 실패합니다.

패키지를 설치합니다.

make tooldir=/usr install

사용하지 않는 정적 라이브러리를 제거합니다.

rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,gprofng,opcodes,sframe}.a


  • 설치된 프로그램
    addr2line, ar, as, c++filt, dwp, elfedit, gprof, gprofng, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings, strip
  • 설치된 라이브러리
    libbfd.so, libctf.so, libctf-nobfd.so, libgprofng.so, libopcodes.so, libsframe.so
  • 설치된 디렉토리
    /usr/lib/ldscripts

간략한 설명

  • addr2line
    프로그램 주소를 파일 이름과 줄 번호로 변환합니다. 주소와 실행 파일의 이름이 주어지면, 실행 파일의 디버깅 정보를 사용하여 주소와 관련된 소스 파일과 줄 번호를 확인합니다.
  • ar
    아카이브에서 생성, 수정 및 추출합니다.
  • as
    gcc의 출력을 객체 파일로 어셈블하는 어셈블러.
  • c++filt
    링커가 C++와 Java 심볼의 엉킴을 풀고 과부하된 함수가 충돌하지 않도록 하는 데 사용됩니다.
  • dwp
    DWARF 패키징 유틸리티
  • elfedit
    ELF 파일의 ELF 헤더를 업데이트합니다.
  • gprof
    호출 그래프 프로필 데이터를 표시합니다.
  • gprofng
    성능 데이터 수집 및 분석
  • ld
    여러 오브젝트 및 아카이브 파일을 단일 파일로 결합하여 데이터를 재배치하고 심볼 참조를 묶는 링커입니다.
  • ld.gold
    ELF 오브젝트 파일 형식만 지원하는 ld의 축소 버전입니다.
  • ld.bfd
    ld에 대한 하드 링크
  • nm
    지정된 객체 파일에서 발생하는 심볼을 나열합니다.
  • objcopy
    한 유형의 오브젝트 파일을 다른 유형으로 변환합니다.
  • objdump
    표시할 특정 정보를 제어하는 옵션과 함께 지정된 객체 파일에 대한 정보를 표시합니다; 표시된 정보는 컴파일 도구에서 작업하는 프로그래머에게 유용합니다.
  • ranlib
    아카이브의 내용에 대한 색인을 생성하고 아카이브에 저장합니다; 색인에는 재배치 가능한 객체 파일인 아카이브 멤버가 정의한 모든 심볼이 나열됩니다.
  • readelf
    ELF 타입 바이너리에 대한 정보를 표시합니다.
  • size
    주어진 오브젝트 파일의 섹션 크기와 총 크기를 나열합니다.
  • string
    지정된 각 파일에 대해 지정된 길이(기본값은 4) 이상의 출력 가능한 문자 시퀀스를 출력합니다. 객체 파일의 경우 기본적으로 초기화 및 로드 섹션의 문자열만 인쇄하고 다른 유형의 파일의 경우 전체 파일을 검사합니다.
  • strip
    객체 파일에서 심볼을 삭제합니다.
  • libbfd
    바이너리 파일 기술자(File Descriptor) 라이브러리
  • libctf
    Compat ANSI-C 타입 포맷 디버깅 지원 라이브러리
  • libctf-nobfd
    libbfd 기능을 사용하지 않는 libctf 변형 라이브러리
  • libgprofng
    gprofng에서 사용하는 대부분의 루틴을 포함하는 라이브러리
  • libopcodes
    프로세서를 위한 명령어의 “읽을 수 있는 텍스트” 버전인 옵코드를 처리하는 라이브러리. objdum와 같은 유틸리티를 만드는 데 사용됩니다.
  • libsframe
    간단한 언와인더를 사용하여 온라인 백트레이싱을 지원하는 라이브러리.
  • linuxfromscratch/12.1/089-binutils-2.42.txt
  • 마지막으로 수정됨: 2024/06/17 08:07
  • 저자 baecy