Ubuntu

ubuntu 包的名稱是什麼,包含 llvm 連結器 lld

  • October 8, 2019

想從 LLVM嘗試這個lld 。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

自 2017 年 1 月以來,LLVM apt 儲存庫包括 lld, Debian 中可用的快照包也是如此(從不穩定的 4.0 開始,實驗性的 5.0 開始)。從版本 5 開始,lld軟體包在 Debian 中可用(lld-5.0在Debian 10 中,stretch-backportslld-6.0Debian 9 和 10 中,在 中,以及目前正在準備的版本中的更高版本的軟體包)。stretch-backports``lld-7``lld-8``buster-backports

要在 Debian 或 Ubuntu 上安裝上游軟體包,請按照您的發行版的說明進行操作。

早在 2015 年 2 月最初編寫此答案時,LLVM apt 儲存庫就聲明它包括 LLVM、Clang、compiler-rt、polly 和 LLDB。lld 不包括在內。即使是 Debian 中最新的快照包(由與 LLVM 包相同的團隊維護)也不包括 lld。

引用自:https://unix.stackexchange.com/questions/184014