C ++リンカーエラーを検出する自動プログラムはありますか?
-
22-07-2019 - |
質問
GCCコンパイラを使用して、C ++を使用するLinux環境で作業しています。
現在、大規模な既存のコード本体の変更とアップグレードに取り組んでいます。その一環として、さまざまな場所でコード全体に非常に多くの小さな参照を追加して、物事をリンクしたり、いくつかの新しい外部コードライブラリを追加したりする必要がありました。ビルドプロセスを処理するために、configure.acファイルにリンクされたMakefileの非常に大きく複雑な構造もあります。
ビルドプロセスを開始すると、すべてが問題なくコンパイルされますが、新しく作成したカスタムコードライブラリを使用しようとすると、恐ろしいリンカーエラーが発生します。これで、スペルミスマッチを探す細かい歯の櫛を使って膨大な量のコードを実行し、ビルドプロセスにすべてのライブラリが含まれる順序を確認し、作成された.oファイルにダンプを使用する必要があるものが含まれていることを確認し、それらはすべて、あるべき場所にあります。また、ライブラリを個別にテストしましたが、問題は間違いなくありません。
要するに、これらのシナリオで通常行うべきことのほとんどを試しました。
ここで役立つcppcheckまたはsplint(どちらも実行できませんでした)と同様に、リンカーエラーを自動的に検出できるC ++用のツールはありますか?
解決
プラットフォームがわからないが、静的ライブラリ( .a
)のリンクには特定の順序が必要であることがわかったまで、gccでリンカーの問題に時間を費やしました。 > gcc object.o first.a second.a gcc object.o second.a first.a
。
他のヒント
FWIW(あまり)私は、いくつかの異なるプラットフォームにアクセスできるので、別のリンカーを使用してこの種の問題に取り組んでいます。別のリンカーを使用できる場合は、次のいずれかが見つかります。
a)プログラムリンク。問題を「なぜリンクしないのか」から変換します。 「リンカーとリンクの違いは何ですか?」これは正確な一歩ではありませんが、一方への一歩はあなたに解決策を見ることができる別の視点を与えることがあります;
または
b)リンクに失敗します。この場合、他のリンカーは失敗の理由に関するより有用な情報を提供する可能性があります。