私のプロジェクトは、いくつかの静的ライブラリで構成されており、最終ステップでリンクされています。ライブラリのリンク順序が重要であるという問題があります(そうしないと、未定義のシンボルリンカエラーが発生します)。リンクされたライブラリ (-lcommon -lsetup -lcontrol など) を再ソートする必要があるという問題が発生することがあります。現時点では、再ソート、コンパイル、エラーのチェック、再ソート、コンパイルなどの愚かな試行錯誤です。
そこで、ライブラリ間の依存関係を示し、リンクするライブラリの順序を生成する小さなプログラムを作成しました。nmから定義済み ('T'、'B' など) および未定義のシンボル ('U') を読み込み、弱いシンボル('w'、'W'、'v'、'V')をnmから削除します。 「未定義のシンボル リスト」。現在、未定義のシンボルごとに、それを解決するライブラリを決定します。
しかし、私のプログラムは循環依存関係を示しています...私の間違いは何ですか?
それらが本当に存在する場合、私はまったくリンクできませんでした...それで、nm出力を分析するときに何が欠けていましたか? または、これらの依存関係を取得するために nm 出力を分析する方法はありませんか?
libcommon.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
libhardware.a:
00000484 T _ZN15HardwareUnit23GetHardwareSerialNumberEv
libsecurityaccess.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
---
libhardware.a:
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
libsecurityaccess.a:
00004020 T _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString