Debian Linux で clang でコンパイルされた小さな C プログラムのコード カバレッジ ファイルを生成しようとしています。これが私がやったことです:
neuron@debian:~/temp$ ls
main.c test.c test.h
neuron@debian:~/temp$ clang *.c
neuron@debian:~/temp$ ./a.out
0
これはまさに期待どおりです。コンパイルして実行できます。現在、カバレッジを有効にしようとしています。
neuron@debian:~/temp$ clang --coverage *.c
/usr/bin/ld: cannot find /usr/bin/../lib/libprofile_rt.a: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
リンク用のライブラリを含めようとしています。
neuron@debian:~/temp$ clang --coverage -lprofile_rt *.c
/usr/bin/ld: cannot find -lprofile_rt
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ライブラリの検索:
neuron@debian:~/temp$ find / -name \*profile_rt\* 2>/dev/null
/usr/lib/llvm-3.0/lib/libprofile_rt.so
/usr/lib/llvm-3.0/lib/libprofile_rt.a
neuron@debian:~/temp$ clang --coverage -lprofile_rt -L/usr/lib/llvm-3.0/lib *.c
/usr/bin/ld: cannot find /usr/bin/../lib/libprofile_rt.a: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最後のコマンドのより詳細な出力を次に示します: http://pastie.org/8468331。そこで気になること:
- リンカは大量の gcc ライブラリを使用してリンクします (ただし、これは llvm が独自の binunitls を持たないことが原因である可能性があります)。
/usr/bin/../lib/libprofile_rt.a
指定したパスではなく、プロファイリング ライブラリが検索されています。
リンカーに引数を渡すと、出力は同じになります。
neuron@debian:~/temp$ clang --coverage -Wl,-L/usr/lib/llvm-3.0/lib *.c -lprofile_rt
/usr/bin/ld: cannot find /usr/bin/../lib/libprofile_rt.a: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私は何を間違っていますか?