5

実行可能ファイル、いくつかの独自の静的ライブラリ、およびいくつかのプリコンパイル済み静的サード パーティ ライブラリで構成される MSVC++ プロジェクトがあります。exe はビルド時間を短縮するためにインクリメンタル リンクを使用します。

実行可能プロジェクト内の .cpp ファイルを変更すると、コンパイルとリンクは非常に高速です (10 秒未満)。
しかし、自分のライブラリの 1 つで .cpp ファイルを変更すると、実行可能プロジェクトは、使用するすべてのライブラリに対して完全なリンクを実行しているように見えます。
実際に完全なリンクであるかどうかはわかりませんが、「vc90.pdb not found」リンカー警告から、まったく変更されていない外部ライブラリにリンクしていることがわかります。

プロジェクト構造の例を次に示します。

  • コンパイル済みのサードパーティ ライブラリExtLib1ExtLib2およびExtLib3
  • 独自のライブラリMyLib、サードパーティのライブラリを使用ExtLib1
  • MyExeとを使用してMyLib自分の Exe 、ExtLib1-3

で .cpp ファイルを変更するMyLibと、インクリメンタル リンクがオンになっている場合でも、 、、およびにMyExeリンクされます。MyLibExtLib1ExtLib2ExtLib3

私のプロジェクトでは完全なリンクに約 5 分かかるので、質問しています:変更されたライブラリのみを再リンクする方法はありますか?

4

2 に答える 2

2

これは、インクリメンタル リンクの概要です。完全なリンクを引き起こす状況をリストします。それらの 1 つは、「/Yu /Z7 オプションでコンパイルされたオブジェクトが変更されました。」、MyLib がそれをキャッチしたかどうかを確認します。

于 2012-07-05T13:29:46.817 に答える
1

スタティック ライブラリが変更されると、少なくとも Visual Studio 2013 では実行可能ファイルへの完全なリンクが常に存在し、おそらく出力ウィンドウに次のようなものが表示されます。

2>Link:
2>  LINK : library changed; performing full link

ただし、朗報です。Visual Studio 2015 で簡単なテストを行ったところ、インクリメンタル リンクが期待どおりに機能するように見えました。

出典:同じ問題を抱えていたので、多くの実験と周りを見回しています。また、これ: http://www.pcreview.co.uk/threads/incremental-linking-and-multiple-projects.1431266/、具体的には:

これは仕様によるものです。静的ライブラリが変更されたときにインクリメンタル リンクを行うことはできません。これも以前はサポートされていませんでした。

Ronald Laeremans、Visual C++ チーム

編集 - 静的ライブラリを使用する場合、VS 2015 に増分リンクがあることが確認されています: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with -visual-studio-2015.aspx .

于 2016-01-04T07:51:21.040 に答える