2011-01-26 24 views
4

GCCの複数の静的ライブラリとアプリケーションをリンクしようとしています。GCCの循環参照を含むライブラリをリンクする

問題の原因となるライブラリは2つあります。 Libsupportはアプリケーション用の端末を提供します。 libcpuを使ってシリアルリンク、タイミング、同期を提供しています。 Libcpuはlibsupportを利用して、シリアルデータなどのキューイングを提供しています。

リンク時にlibsupportを最初に指定すると、libcpuをキュー関数にリンクすることはできません。私はlibcpuを指定していますか?最初のlibサポートは、シリアルリンク(およびその他の)機能をリンクできません。

GCCはライブラリを1回だけ解析し、未使用のオブジェクトはすべて破棄するようです。

ライブラリを複数回解析するか、すべてのオブジェクトを含めるようにgccに依頼できますか?

答えて

8
gcc ... -lsupport -lcpu -lsupport -lcpu 

- >あなたはより多くの「-lsupport -lcpu」を指定する必要があるかもしれない理由は、その前に来た(必ずしも必要ではないものは後から指定された)ライブラリの解像度を、原因となるライブラリーの各言及将来は。

または、--start-group -lsupport -lcpu --end-groupを1回試してください。

+1

グループ指定子は興味深いです。以前は見たことがありませんでした。 – Spaceghost

2

通常、この種の問題を回避するためにライブラリを複数回指定することができます。

$ gcc ... -lsupport -lcpu -lsupport ... 
+0

私は試しましたが、うまくいかなかった。それから、 "-lsupport -lcpu -lsupport -lcpu"を試してみました。ハッピングしているのはわかりませんが、アプリケーションがリンクしています。 – Gerhard

4

Hereは、ライブラリを繰り返すか、--start/--end-groupを使用する必要がある理由の詳細な説明です。