2

これはよくある質問のようですが、答えが見つからないようです。

VS がリンク時に特定の関数をリンクするために使用する特定のライブラリを見つける方法はありますか?

Visual Studio を使用してマルチプロジェクト ソリューションを構築しています。複数のプログラムで使用される一連の .libs を生成するソリューション (ライブラリ ソリューション) があります。これらのライブラリの 1 つは、大文字の名前を強制する Fortran コード (Intel Fortran 77 コンパイラ) から生成されます。

これらのライブラリを、アプリケーションをビルドするソリューションに静的にリンクします (これはたまたま C++ にあり、適切な「extern C」とプロトタイプを使用します。

私が抱えている問題は、特定の関数を生成するライブラリを削除でき、プログラムが問題なくコンパイルされ (問題ありません)、リンクされることです (なんてこった!)。そのため、Linker->Input->Additional dependencies のすべてのライブラリに移動し、objdump を実行して関数 (fortran のサブルーチン) 名を探しますが、表示されません。私はすべてのプロジェクトの依存関係に対して同じことを行いますが、まだサイコロはありません。

ライブラリ (およびすべての関数呼び出しとプロトタイプ) をランダムなもの (myFunction12345 など) に変更し、再コンパイルしてリンクすると、すべてが期待どおりに機能するため、何かがリンクされていることがわかります。

fwiw 私の関数名は AIR です

リンク時にVSが使用しているLIBを特定する方法を学んでいるので、特定の問題を解決することにはあまり興味がありません。さらに、リンク時に複数のオブジェクトが定義されている場合に、警告またはエラーを発生させるためにスローできるリンカー フラグがあるかどうかを知りたいです。

何か案は?

4

1 に答える 1

4

/verbose をリンカー コマンド ラインの追加オプションに追加します。結果の出力で、「Found _AIR in xxxx」などの行を探します。周囲の線は、何が起こっているかを明確に示しているはずです。

目的のライブラリの前にライブラリ検索パスから同じ名前のライブラリが取り込まれている可能性があります。または、関連するシンボルがデフォルト ライブラリでも定義されている可能性があります。

于 2013-05-20T02:17:54.043 に答える