概要
Microsoft Visual C++ のコンパイラとリンカーの 64 ビット バージョンを使用して DLL をビルドするとき、エクスポートに複数回の関数が宣言されている場合にリンカー エラー番号 LNK4197 が表示されます。
現象
リンカー出力を次のようなことがあります。
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
原因
エクスポート複数回の関数が宣言されているときに、リンカー エラー番号 LNK4197 が生成されます。エクスポートする次の方法のいずれかで宣言された関数。
-
方式を使用して、C のソース ファイル内で関数を宣言します。
__declspec(dllexport) int DllSample() { return 42;}
-
モジュール定義を使用して、関数が宣言されている (。DEF) ファイル。
EXPORTS DllSample
このリンカー エラーが最も頻繁に発生すると関数キーワードとします。DEF ファイルを使用してで同じ関数名を定義します。DLL プロジェクトです。
解決方法
この問題を解決するには、エクスポートされた関数のみ 1 回定義、方式を使用して、またはを使用して、します。DEF ファイルです。これらのメソッドの両方を使わないでください。
状態
これは仕様による動作です。
詳細情報
エクスポート複数回の関数を宣言することがないが生じる場合、Microsoft Windows の C コンパイラとリンカーの 32 ビット バージョンでこの資料の「現象」に記載されているリンカー エラーが発生します。ただし、Windows の C コンパイラとリンカーの 32 ビットと 64 ビットの両方のバージョンの関数のエクスポート 1 つだけの時間を定義することをお勧めします。