6

-Wl,--start-groupGCC では、リンカー フラグを使用して、-Wl,--end-group循環依存関係を持つライブラリとのリンクの問題を解決できます。clang でも同じことをしたいのですが、この機能はlld バージョン 3.2 で削除されたようです。どうすればいいのですか?

4

3 に答える 3

4

LLVM 3.2のリリース ノートには、次のように記載されています。

llvm-ld と llvm-stub は削除されました。llvm-ld 機能は部分的に llvm-link | に置き換えることができます。選ぶ | {llc | as, llc -filetype=obj} | ld、または完全に Clang に置き換えられます。

デフォルトでは、clang はシステム リンカを使用しているようです。たとえば、Linux では GNU ld を使用します。

$ clang --version
clang version 3.2 (branches/release_32 170558)
...
$ clang -Wl,--verbose
GNU ld (GNU Binutils; devel:gcc / openSUSE_12.3) 2.24.0.20140403-196
...

これは、GCC と同様に -Wl,--start-group と -Wl,--end-group を使用できることを示唆しています。

于 2014-10-14T13:26:44.240 に答える
3

私は循環依存のファンではありません:)しかし、ここでは、いくつかのライブラリを2回リンクすることでこのケースを処理すると言う人もいます。試したことはありませんが、コードのフットプリントが増える可能性があります。

$(CC) -o myApp -lfoo -lbar -lfoo

これがclangで機能するかどうかはわかりませんが、試してみる価値はあります。

最善の解決策は、循環依存関係を削除することです。これにより、将来さらに多くの問題が発生する可能性があります。

于 2014-10-13T19:52:23.647 に答える