gold
링커를 사용해본 사람이 있나요? 상당히 큰 프로젝트를 연결하려면 GNU 대신 이것을 사용해야 하는데 ld
, 오류가 발생하고 연결에 실패합니다.
링커는 실패한 대규모 프로젝트를 어떻게 gold
연결할 수 있습니까 ? ld
일종의 메모리 부정 행위가 있습니까?
답변1
이 링커는 BFD("전통적인" GNU binutils 링커)보다 유지 관리가 더 쉽고 빠른 링커를 gold
생성하는 것을 목표로 하는 ELF 관련 링커로 설계되었습니다 . ld
부작용으로 BFD보다 적은 메모리를 사용하여 매우 큰 프로그램을 연결할 수 있습니다 ld
. 아마도 처리할 추상화 계층이 적고 링커의 데이터 구조가 ELF 형식에 더 직접적으로 매핑되기 때문일 것입니다.
두 링커 간의 디자인 차이점과 메모리 사용에 미치는 영향을 구체적으로 설명하는 문서가 얼마나 많은지 잘 모르겠습니다. 매우 흥미로운 점이 있습니다.링커에 관한 기사 시리즈저자: 다양한 GNU 링커의 저자인 Ian Lance Taylor가 .he의 원인을 설명합니다 gold
.쓰다저것
제가 지금 사용하고 있는 링커는 gold라고 불리며 저의 세 번째 링커가 될 것입니다. 그것은 단지 ELF 링커일 뿐입니다. 다시 말하지만, 목표는 속도입니다. 이 경우에는 두 번째 링커보다 빠릅니다. 수년에 걸쳐 링커는 ELF 및 공유 라이브러리에 대한 지원을 추가하여 크게 느려졌습니다. 이 지원은 설계된 것이 아니라 패치된 것입니다.
(두 번째 링커는 BFD 입니다 ld
.)
답변2
골드 링커는 연결 프로세스를 더 빠르게 만들기 위해 작성되었습니다. 금의 저자에 따르면이안 랜스 테일러
현재 Gold에는 기존 링커에 비해 단 한 가지 중요한 이점이 있습니다. 바로 속도가 더 빠르다는 것입니다. 대규모 C++ 프로그램에서는 5배 더 빠르게 실행되는 것으로 측정되었습니다.
그는 골든 링커의 성능을 전통적인 GNU 링커와 비교하고 있습니다. gold(GNU 링커와 달리)는 BFD 라이브러리를 사용하여 객체 파일을 처리하지 않습니다.
gold의 한계는 (여러 객체 파일 유형을 처리할 수 있는 GNU 링커와 달리) ELF 형식의 객체 파일만 링크할 수 있다는 것입니다.
GNU 링커에서 겪고 있는 문제에 대한 흥미로운 답변은 다음과 같습니다.너무 비슷한 질문마이클 아담으로부터:
골든 링커는 일부 세부 사항에서 클래식 링커보다 더 정확한 것처럼 보였기 때문에 코드에서 일부 종속성 문제도 발견했습니다. 이 Samba 커밋을 참조하세요.
답변3
gold
ld
벤치마크 와 비교
나는 LD와 금에 대한 특정 합성 벤치마크를 다음 위치에 게시했습니다.https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
결과 요약: 금은 ld보다 2~3배 빠릅니다.
템플릿과 코드 생성이 통제할 수 없는 복잡한 C++ 프로젝트의 경우 연결 단계가 프로젝트의 모든 파일에 영향을 미치고 컴파일과 달리 변경하더라도 항상 완료되어야 하기 때문에 이러한 시간 이득은 엄청난 게임 체인저가 될 수 있습니다. 그냥 .cpp 파일입니다.
따라서 링크 시간이 느리면 개발 주기가 견딜 수 없게 되며, 이것이 아마도 Google이 리소스를 투자하는 주된 이유일 것입니다. 각 사소한 파일 변경에 대해 30초가 아닌 10초를 기다리는 이점을 상상해 보십시오.
이 답변에서도 언급했듯이 합성 벤치마크의 시간 이득은 복잡한 실제 프로젝트(gem5)에서 얻은 실제 이득과도 일치합니다.
답변4
최신 GNU/Linux 시스템에는 세 가지 링커가 제공됩니다:
속도 벤치마크는 다음을 참조하세요.https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2TL, DR: lld
가장 빠르고 그 gold
다음ld
일부 소식통은 금 프로젝트가흐르지 않는,Fedora의 패키지 구조는 이를 반영합니다.