7

サードパーティのライブラリを使用して作業を開始していますが、Visual Studio 2010でビルドすると、このリンカーの警告が何度も表示されることに気付きました(LNK4221)。リンクされていたオブジェクトファイルの作成に使用されたソースを調べたところ、これらの実装はすべてヘッダーファイルにあることがわかりました。興味深いことに、プロジェクトには、実装のヘッダーに#includeのみを含む対応する.cppファイルが含まれていることにも気づきました。

私は興味があります-これのポイントは何ですか、そしてなぜ私はこのテクニックを使いたいのですか?.cppファイルがプロジェクトに値を追加していない場合、リンカーの警告を取り除くためにそれらを削除する必要がないのはなぜですか?

同様の質問を検索してみましたが、興味のあるものは見つかりませんでした。何か知っているなら、それらをリンクしてください。

4

2 に答える 2

2

単一の#includedファイルはstdafx.hでしたか?I.その場合、プリコンパイル済みヘッダーを扱っています。通常のセットアップは、「プリコンパイル済みヘッダーの生成」コンパイラオプションを持つ1つの.cppファイルと、「usepch」を持つプロジェクト内の残りの.cppファイルに対するものです。

于 2012-07-18T18:02:20.813 に答える
1

これを使用して、ヘッダーが最初の位置に含まれる少なくとも1つのファイルに含まれていることを確認します。そうすることで、ヘッダーがそれ自体でコンパイル可能であることを確認します。

警告を発行しないようにリンカを説得するには、非常に大きな変数を持つ外部変数を使用できます。

int variable_with_a_name_that_includes_the_file_name_somehow = 42;
于 2012-07-18T16:10:24.250 に答える