コードベースが静的ライブラリに分割されています。残念ながら、ライブラリには循環依存があります。たとえばlibfoo.a
はlibbar.a
に依存し、その逆もあります。同じライブラリを2回リンクすることで循環依存関係を解決できますか?
私はこれを処理するための「正しい」方法はそうのように、リンカーの--start-group
と--end-group
オプションを使用することです知っている:
g++ -o myApp -Wl,--start-group -lfoo -lbar -Wl,--end-group
しかし、当社の既存のMakefileには、問題は通常、次のように処理されます。
g++ -o myApp -lfoo -lbar -lfoo
(これは〜に複雑な相互依存関係を持つ20個のライブラリを拡張想像してみてください。)
私はOUを通過されていますr第2フォームを最初に変更したメイクファイル、しかし今では私の同僚はなぜ私に尋ねています...そして、それは「クリーナーなので」と他のフォームが危険であるという曖昧な感覚の他に、良い答えはありません。
同じライブラリを複数回リンクすることができますこれまでに作成に問題がありますか?たとえば、同じ.oが2回引き込まれると、リンクが複数定義のシンボルで失敗する可能性がありますか?あるいは、同じ静的オブジェクトを2つコピーして微妙なバグを作成するリスクがありますか?
基本的に、同じライブラリを複数回リンクする際にリンク時または実行時にエラーが発生する可能性があるかどうかを知りたいと思います。もしそうなら、それらを引き起こす方法。ありがとう。
私が考えることができる唯一の問題は、あなたが同じライブラリの2つの異なるバージョンとリンクすることを管理している場合です。それはやりにくく、Linuxでは(IMO)は起こりそうもない。また、20のライブラリのみがあまり見えません。それはmakefileを歩く価値があるのですか?あなたは何か他のことをする時間を費やすことができます。 – SigTerm
この問題は、循環依存関係を持たないようにライブラリを修正すると消えてしまいます。 –
ライブラリを調べて分割することによって循環依存関係を削除することはできませんか?それは最もクリーンな方法でしょう。 –