LLD將被添加到LLVM 4 rc1中,并默認(rèn)啟用。LLD自稱在性能上大大優(yōu)于GCC ld。雖然該新鏈接器早可用于構(gòu)建在用的FreeBSD/amd64基系統(tǒng)(base system),但是這次將其添加到LLVM中依然是實(shí)驗(yàn)性的,在出現(xiàn)問(wèn)題時(shí)會(huì)回退到rc2。
在最新發(fā)布的FreeBSD項(xiàng)目季度狀態(tài)報(bào)告中,下面一段話是對(duì)LLD進(jìn)展情況和成熟度的最好實(shí)證:
上個(gè)季度中,LLD開發(fā)人員做出了很大的進(jìn)展。隨著變更已提交到LLD和FreeBSD,我們達(dá)成了一個(gè)重要的里程碑,即現(xiàn)在可以使用LLD鏈接整個(gè)FreeBSD/amd64基系統(tǒng)(內(nèi)核與用戶層)。
此外,BSD項(xiàng)目貢獻(xiàn)的一些補(bǔ)丁使得LLD可以鏈接近95%的BSD ports,大約是兩萬(wàn)五千多個(gè)軟件包。
LLD工作啟動(dòng)于2015年五月,目標(biāo)在于重寫ELF(UNIX)和COFF(Windows)系統(tǒng)鏈接器以提供更高的性能。據(jù)LLD開發(fā)人員說(shuō),新鏈接器在總體上會(huì)比GNU gold linker快1.2到2倍,而GNU gold linker本身也是Google為改進(jìn)ld鏈接性能而在內(nèi)部創(chuàng)建的。事實(shí)上,LDD可以比ld和gold快得更多,尤其是編譯大規(guī)模代碼庫(kù)時(shí)。另一方面,對(duì)于小型程序或者大量使用共享庫(kù)的程序,LDD的優(yōu)勢(shì)就并非那么明顯了。和gold一樣,LLD并不使用BFD格式去對(duì)不同的二進(jìn)制文件格式做抽象。
尤其值得一提的是,LLD非常之小,相比于gold的十六萬(wàn)五千行代碼,用于COFF鏈接器的LDD只有七千行代碼,而用于ELF鏈接器的是一萬(wàn)八千行代碼。此外,它也可以嵌入到靜態(tài)庫(kù)等程序中,還可用于調(diào)用lld::elf::link入口點(diǎn)。
如果想在LLVM 4可用之前就試用LLD,你可以通過(guò)構(gòu)建源文件得到:
$svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm $cd llvm/tools $svn co http://llvm.org/svn/llvm-project/lld/trunk lld $cd ../../.. $mkdir build $cd build $cmake -G “Ninja” -DCMAKE_BUILD_TYPE=”Release” -DCMAKE_INSTALL_PREFIX=”your_preferred_location” ../llvm $ninja lld $ninja install一旦LDD編譯完成,最安全可靠的使用方法是將ld邏輯鏈接到ld.lld,這同樣會(huì)使LDD與GCC一起工作。或者你也以使用LLVM的-fuse-ld=lld選項(xiàng),這樣就不必再做邏輯鏈接了。
查看英文原文: LLD, LLVM’s New Linker, Coming to LLVM 4