gold 링커를 사용한 적이 있습니까? 상당히 큰 프로젝트를 연결하기 위해 GNU ld 대신 이것을 사용해야했는데, 몇 가지 오류가 발생하고 연결에 실패했습니다.

어떻게 gold 링커는 ld가 실패한 대규모 프로젝트를 연결할 수 있습니까? 어딘가에 기억 속임수가 있습니까?

댓글

  • 어떤 오류가 있었나요? ' 메모리가 부족하여 ld이 OoM에 의해 사망했습니다. ld는 대규모 C ++ 프로젝트에서 많은 GB의 램을 쉽게 사용할 수있는 반면, gold, 특히 lld 링커는 훨씬 더 리소스 효율적입니다.
  • ld에 메모리 부족 오류가 발생했지만 골드 링커가 연결할 수있었습니다.

Answer

gold 링커는 ELF 전용 링커로 설계되었습니다. BFD ld ( “전통적인”GNU binutils 링커)보다 더 유지 관리가 쉽고 빠른 링커를 생성 할 목적으로. 부작용으로 BFD ld보다 적은 메모리를 사용하여 매우 큰 프로그램을 연결할 수 있습니다. 아마도 처리 할 추상화 계층이 적고 링커의 데이터가 구조체는 ELF 형식에 더 직접적으로 매핑됩니다.

두 링커 간의 디자인 차이점과 메모리 사용에 미치는 영향을 구체적으로 설명하는 문서가 많이 있는지 잘 모르겠습니다. 다양한 GNU 링커의 저자 인 Ian Lance Taylor가 작성한 링커에 대한 일련의 기사 가 있습니다.이 기사는 gold. 그는 작성 합니다.

지금 작업중인 링커 인 gold는 will 내 세 번째가 되십시오. 독점적으로 ELF 링커입니다. 다시 한 번 목표는 속도입니다.이 경우 두 번째 링커보다 빠릅니다. 이 링커는 ELF 및 공유 라이브러리에 대한 지원을 추가하여 수년 동안 상당히 느려졌습니다. 이 지원은 설계되지 않고 패치되었습니다.

(두 번째 링커는 BFD ld입니다.)

댓글

  • 이름은 ' 금색 ' ' ld '를 ' 리드 금이 납보다 분명히 더 가치가 있습니까?
  • @Aganju 아니요, ' go 앞에 ld가 붙습니다.

Answer

골드 링커는 링크 프로세스를 상당히 빠르게 만들기 위해 작성되었습니다. 골드 인증 자에 따르면 Ian Lance Taylor

현재 골드에는 기존 링커에 비해 상당한 이점 : 더 빠릅니다. 대형 C ++ 프로그램에서 5 배 더 빠르게 실행되는 것으로 측정했습니다.

그는 골드 링커 성능을 기존 GNU 링커와 비교하고 있습니다. gold (GNU 링커와 달리)는 BFD 라이브러리를 사용하여 개체 파일을 처리하지 않습니다.

골드의 한계는 (많은 객체 파일 유형을 처리 할 수있는 GNU 링커와 달리) ELF 형식 객체 파일 만 링크 할 수 있다는 것입니다.

GNU를 사용할 때 직면 한 문제에 대해 링커 님, 다음은 Michael Adam의 SO에 대한 유사한 질문 에 대한 흥미로운 답변입니다.

골드 링커는 일부 세부 사항과 관련하여 고전적인 것보다 더 정확 해 보이기 때문에 우리 코드에서 일부 종속성 문제를 발견했습니다. 예를 들어 이 Samba 커밋.

답변

goldld 벤치 마크

ld 대 금의 구체적인 합성 벤치 마크를 다음 위치에 게시했습니다. https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

요약 결과 : 금은 ld보다 2 배에서 3 배 더 빨랐습니다.

링크 단계에는 모든 파일이 포함되므로 제어 할 수없는 템플릿과 코드 생성을 사용하는 복잡한 C ++ 프로젝트에서 이번 시간 이득은 엄청난 게임 체인저가 될 수 있습니다. 프로젝트에서 컴파일과 달리 .cpp 파일 하나만 변경하더라도 항상 수행해야합니다.

따라서 느린 링크 시간은 개발주기를 견딜 수 없게 만들고 주된 이유 일 수 있습니다. 구글은 자원을 가라 앉혔다. 사소한 파일 변경에 대해 30 초가 아닌 10 초를 기다릴 때 얻는 이득을 상상해보십시오.

합성 벤치 마크의 시간 이득은 그 답변에서도 언급했듯이 복잡한 실제 프로젝트 (gem5)에서 얻은 실제 이득과도 일치했습니다.

답변

최신 GNU / Linux 시스템에는 세 가지 링커가 있습니다.

  • ld , GNU binutils에서 유지 보수,
  • gold , GNU binutils에서 유지 보수, “아직 베타 테스트 중”,
  • lld , LLVM 프로젝트의 일부로 개발되었습니다.

속도 벤치 마크는 다음을 참조하십시오. https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR : lld가 가장 빠르며 그 다음이 gold 다음에 ld

일부 소식통은 금 프로젝트가 라고 말합니다. 정체되고 , Fedora의 패키지 구조는이를 반영합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다