Komunikat o błędzie LNK4197 w 64-bitowej wersji kompilatora Visual C++

Dotyczy: Visual C++ 2010 Express

Podsumowanie


Podczas tworzenia biblioteki DLL przy użyciu 64-bitowej wersji programu Microsoft Visual C++ kompilator i łączenie, może zostać wyświetlony Linker numer błędu LNK4197, jeśli funkcja została zadeklarowana na wywóz więcej niż jeden raz.

Symptomy


Program łączący dane wyjściowe mogą być podobne do następujących:
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 

Przyczyna


Program łączący numer błędu LNK4197 jest generowany, gdy funkcja została zadeklarowana na wywóz więcej niż jeden raz. Funkcja jest zadeklarowana na wywóz w jednym z następujących sposobów:
  • Funkcja jest zadeklarowana za pomocą słowa kluczowego __declspec(dllexport) w pliku źródłowego C:
    __declspec(dllexport) int DllSample() {   return 42;}
  • Funkcja jest zadeklarowana za pomocą definicji modułów (. Plik DEF):
    EXPORTS   DllSample
Najczęściej występuje ten błąd łączenie po słowie kluczowym __declspec(dllexport) i. Plik DEF są używane do definiowania tej samej nazwie funkcji w. Projekt biblioteki DLL.

Rozwiązanie


Aby rozwiązać ten problem, zdefiniować eksportowanych funkcji tylko jeden raz, przy użyciu słowa kluczowego __declspec(dllexport) lub za pomocą. Plik DEF. Nie należy używać obu tych metod.

Stan


To zachowanie jest zgodne z projektem.

Więcej informacji


Deklarowanie funkcji na wywóz więcej niż jeden raz mogą nie dawać błędu program łączący, który jest opisany w sekcji "Symptomy" tego artykułu w 32-bitowych wersjach systemu Microsoft Windows C++ kompilator i łączenie. Firma Microsoft zaleca jednak zdefiniować funkcję wywozu tylko jeden raz w zarówno 32-bitowe i 64-bitowych wersjach systemu Windows C++ kompilator i łączenie.