Ubuntu
ubuntu 包的名稱是什麼,包含 llvm 連結器 lld
想從 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-backports
在lld-6.0
Debian 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。