0

GCC コンパイラを使用して、C++ を使用する Linux 環境で作業しています。

現在、既存の大規模なコード本体の変更とアップグレードに取り組んでいます。この一環として、コード全体のさまざまな場所に非常に多数の小さな参照を追加して、物事をリンクし、いくつかの新しい外部コード ライブラリを追加する必要がありました。ビルド プロセスを処理するために、configure.ac ファイルにリンクされた Makefile の非常に大きく複雑な構造もあります。

ビルド プロセスを開始すると、すべてが問題なくコンパイルされますが、作成した新しく追加されたカスタム コード ライブラリを使用しようとすると、恐ろしいリンカ エラーが返されます。これまで、スペルの不一致を探し、すべてのライブラリがビルド プロセスに含まれている順序を確認し、作成された .o ファイルにダンプを使用して必要なものが含まれていることを確認しました。すべてが、本来あるべき場所にあります。また、ライブラリを個別にテストしましたが、問題はそこにありません。

つまり、これらのシナリオで通常行うべきことのほとんどを試しました。

ここで役立つ cppcheck または splint (どちらも実行できませんでした) と同様に、リンカー エラーを自動的に検出できる C++ 用のツールはありますか?

4

2 に答える 2

4

あなたのプラットフォームはわかりませんが、スタティック ライブラリ ( .a) のリンクには特定の順序が必要であり、 とリンクするのは同じではないことに気付くまで、gcc でリンカーの問題に時間を費やしgcc object.o first.a second.aましgcc object.o second.a first.aた。

于 2009-12-01T09:53:46.157 に答える
2

FWIW (それほど多くはありません) いくつかの異なるプラットフォームにアクセスできるため、別のリンカーを使用してこの種の問題に取り組もうとしています。別のリンカーを使用できる場合は、次のいずれかが見つかります。

a)プログラムのリンク。これにより、問題が「リンクしないのはなぜですか?」から変換されます。「リンカーとリンクの違いは何ですか?」これは正確には一歩前進というわけではありませんが、一方の側に一歩踏み出すと、解決策を見ることができる別の視点が得られる場合があります。

また

b) リンクに失敗した場合、他のリンカーが失敗の理由についてより有用な情報を提供する可能性があります。

于 2009-12-01T10:00:22.410 に答える