llvm 링커 lld가 포함된 우분투 패키지의 이름은 무엇입니까?

llvm 링커 lld가 포함된 우분투 패키지의 이름은 무엇입니까?

이것을 시도하고 싶다LLDLLVM에서. 문서는 apt에서 찾을 수 있습니다.여기, 그러나 어떤 패키지에 실행 파일이 포함되어 있는지 모르겠습니다 lld.

lld목적 은 시스템 종속성을 제거하는 것 같지만 clang에는 lld내장되어 있지 않습니다. (아직 아님?)

다음 예를 사용하여 lld사용 여부를 테스트합니다. GNU-ld아카이브 파일이 나타나는 순서에는 몇 가지 제한이 있지만 lld(제가 올바르게 이해한 경우) 이에 대해 더 관대해 보이기 때문에 lld이 예제를 사용하면 성공적으로 빌드될 것입니다. 그러나 내 상자에서는 실패했습니다.

# one.c
extern int two();
int main(int argc, char *argv[])
{
    two();
    return 0;
}

# two.c
void two(){}

$ clang -c two.c; ar cr two.a two.o ; clang -c one.c ; clang two.a one.o
one.o: In function `main':
one.c:(.text+0x19): undefined reference to `two'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

우리가 사용하는 경우 -v:

$ clang -c two.c; ar cr two.a two.o ; clang -c one.c ; clang -v two.a one.o
Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/4.9.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8
 "/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../.. -L/lib -L/usr/lib two.a one.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
one.o: In function `main':
one.c:(.text+0x19): undefined reference to `two'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

주변 전압

Ubuntu clang 버전 3.4-1ubuntu3(tags/RELEASE_34/final)(LLVM 3.4 기반) 대상: x86_64-pc-linux-gnu 스레딩 모델: posix

답변1

2017년 1월부터,LLVM 적절한 저장소lld도 마찬가지다.스냅샷 패키지Debian에서 사용 가능합니다(불안정한 4.0부터, 5.0부터 실험적). 버전 5부터 lld패키지는 Debian( lld-5.0Debian 9 및 10, Debian 9 및 10의 이후 패키지, 현재 준비 중인 릴리스) 에서 사용할 수 있습니다 stretch-backports.lld-6.0stretch-backportslld-7lld-8buster-backports

Debian 또는 Ubuntu에 업스트림 패키지를 설치하려면 지침을 따르세요.당신이 배포할 수 있도록.

이 답변이 원래 2015년 2월에 작성되었을 때,LLVM 적절한 저장소LLVM, Clang, 컴파일러-rt, 폴리 및 LLDB가 포함되어 있음을 의미합니다. lld는 포함되어 있지 않습니다. 심지어최신 스냅샷 패키지Debian(LLVM 패키지와 동일한 팀에서 유지 관리)에는 lld가 포함되어 있지 않습니다.

답변2

lld가 아직 Clang/LLVM 성숙도에 도달하지 않은 것 같으므로 기본 패키지에 포함되지 않습니다.

LLVM의 링커에 대해 약간의 혼란이 있습니다(저도 혼란스럽습니다). 이 답변의 나머지 부분은 (원래 질문에 직접적으로 답변하지는 않지만) 우리가 말하는 내용을 정의하는 데 혼란을 없애는 데 도움이 됩니다! 링커에는 세 가지 유형이 있습니다.

  1. LLVM-LD- LLVM 비트 파일과 실행 가능한 바이너리 객체 파일을 위한 링커처럼 들립니다. 하지만, 그여기에 대답하세요(및 링크 제공)은 LLVM 3.2에서 lld가 제거되었음을 나타냅니다. 이때 대체 링커는 없으며 시스템 ld 링커를 사용해야 합니다.
  2. llvm-링크- LLVM 비트 파일에 대한 현재 링커입니다.
  3. LLD- 실행 가능한 바이너리 개체 파일만 연결하는 ld를 대체하기 위해 적극적으로 개발된 것처럼 들립니다.이 답변은 여기에 있습니다2014년 5월 현재 활발히 개발 중이라고 밝혔습니다. 홈 디렉토리에 나열되어 있습니다LLVM 프로젝트 목록#13처럼요. 나는 그것이 GNU ld/gold를 대체하기 위해 메인 LLVM 패키지에 포함될 만큼 시간이 지나면서 더 좋아지고 성숙해질 것이라고 생각합니다.

답변3

사용우분투 패키지 검색 웹사이트"lld-4.0"이라는 패키지를 표시합니다. Ubuntu 개발 브랜치에는 lld, 특히 "lld-5.0"을 포함할 수 있는 다른 패키지가 있습니다(clever.)

'lld-4.0' 패키지는 'lld'라는 이름이 아닌 실행 파일을 설치합니다. 예를 들어 범용 드라이버인 "lld-4.0"을 설치합니다. 이것을 호출하면 Linux에서 "ld.lld-4.0"을 호출하라는 메시지가 표시됩니다.

Ubuntu에서 설치된 패키지를 테스트합니다.

which ld.lld-4.0
ld.lld-4.0 --version

관련 정보