これを試してみたい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.0
Debian 9および10、Debian 9および10以降のパッケージ、現在準備中のリリース)で利用可能になりましたstretch-backports
。lld-6.0
stretch-backports
lld-7
lld-8
buster-backports
DebianまたはUbuntuにアップストリームパッケージをインストールするには、指示に従ってください。配布できるように。
この回答が元々2015年2月に作成されたとき、LLVM 適切なストレージLLVM、Clang、コンパイラ-rt、ポリ、LLDBが含まれていることを意味します。 lldは含まれていません。でも最新のスナップショットパッケージDebian(LLVMパッケージと同じチームでのメンテナンス)にはlddは含まれていません。