次の方法で共有


リンカー ツールの警告 LNK4286

'filename_1.obj' で定義されたシンボル 'symbol' は 'filename_2.obj' によってインポートされています

同一イメージ内のオブジェクト ファイル filename_1.obj でシンボルが定義されているにもかかわらず、__declspec(dllimport)symbol に指定されました。 この警告を解決するには、 __declspec(dllimport) 修飾子を削除します。

解説

警告 LNK4286 は、リンカーツールの警告 LNK4217 のより一般的なバージョンです。 リンカーは、どのオブジェクト ファイルがシンボルを参照しているかはわかるが、どの関数を参照しているかがわからない場合、警告 LNK4286 を生成します。

LNK4286 を解決するには、filename_2.obj で参照されている シンボル の前方宣言から __declspec(dllimport) 宣言修飾子を削除してください。

最終的に生成されたコードは正しく動作しますが、インポートされた関数を呼び出すために生成されるコードは、関数を直接呼び出すよりも効率が悪くなります。 この警告は、/clr オプションを使用してコンパイルした場合には表示されません。

データのインポートとエクスポート宣言の詳細は、dllexport、dllimport を参照してください。

関連項目

リンカー ツールの警告 LNK4049
リンカー ツールの警告 LNK4217
dllexport、dllimport