qual o nome do pacote ubuntu contém llvm linker lld

3

Gostaria de experimentar este lld da LLVM. O documento sobre o apt pode ser encontrado aqui , mas não sei qual pacote contém o executável lld .

Parece que o objetivo de lld é remover a dependência do sistema, mas o clang não tem lld interno. (Ainda não?)

Usando o exemplo a seguir para testar se lld é usado. GNU-ld coloca algumas restrições na ordem dos arquivos archive, mas lld parece ser mais tolerante com isso (se eu entendi corretamente), então este exemplo deve ser construído com sucesso, se lld for usado. No entanto, falha na minha caixa.

# 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)

Se usarmos -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)

ENV

Ubuntu versão 3.4-1ubuntu3 (tags / RELEASE_34 / final) (baseado no LLVM 3.4) Alvo: x86_64-pc-linux-gnu Modelo de rosca: posix

    
por Albert Netymk 10.02.2015 / 14:48

3 respostas

3

Desde janeiro de 2017, o repositório do LLVM apt inclui o lld, assim como o os pacotes de instantâneos disponíveis no Debian (4.0 na instável, 5.0 no experimental). Presumivelmente, os pacotes de lançamento para 4.0 e 5.0 incluirão o ldd.

Para instalar os pacotes upstream no Debian ou Ubuntu, siga as instruções para sua distribuição . (Leitores que rastreiam a instável Debian podem simplesmente instalar lld-4.0 dos repositórios da Debian.)

Em fevereiro de 2015, quando esta resposta foi originalmente escrita, o repositório do LLVM apt declarou que incluía o LLVM, o Clang, o compilador-rt , polly e LLDB. O lld não foi incluído. Mesmo os pacotes de instantâneos mais recentes no Debian (que são mantidos pela mesma equipe que o LLVM pacotes) não incluiu lld.

    
por 10.02.2015 / 15:59
1

Pelo que parece, o lld ainda não atingiu a maturidade do Clang / LLVM, então ele não está incluído nos pacotes principais.

Existe alguma confusão em torno dos linkers no LLVM (eu estava bastante confuso). O restante desta resposta (embora não responda diretamente à pergunta original) ajuda a esclarecer a confusão para definir do que estamos falando! Existem três que podem ser chamados de linkers:

  1. llvm-ld - isso soa como um linker para bitfiles do LLVM e arquivos binários de objetos executáveis. No entanto, a resposta aqui (e os links fornecidos) sugerem que O lld foi removido de volta no LLVM 3.2. Nesse ponto, não havia um linker substituto, e o sistema ld linker teria que ser usado.
  2. llvm-link - este é o vinculador atual para arquivos de bit LLVM.
  3. lld - isso soa como um substituto desenvolvido ativamente para ld que apenas vincula arquivos binários de objetos executáveis. Esta resposta aqui sugere que ela estava em desenvolvimento ativo em maio de 2014. Ela está listada nos principais Lista de projetos daLLVM como # 13. Eu estou supondo que só pode ficar melhor ao longo do tempo, e amadurecer a um ponto em que é viável incluir no pacote principal do LLVM como um substituto para o GNU ld / gold.
por 30.07.2015 / 09:27
0

Usar o site de pesquisa de pacotes do Ubuntu mostra que um pacote é chamado de "lld-4.0". Existem outros pacotes contendo provavelmente o lld, especialmente o "lld-5.0" no ramo de desenvolvimento do Ubuntu (artful.)

O pacote "lld-4.0" instala executáveis NÃO nomeados "lld". Por exemplo, ele instala "lld-4.0", um driver genérico. Invocando, ele dirá para você chamar "ld.lld-4.0" no linux.

No Ubuntu, para testar o pacote instalado:

which ld.lld-4.0
ld.lld-4.0 --version
    
por 04.10.2017 / 14:46