Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

You receive an LNK4197 error in the 64-bit version of the Visual C++ Compiler


View products that this article applies to.

Summary

When you build a DLL by using the 64-bit version of the Microsoft Visual C++ Compiler and Linker, you may receive Linker error number LNK4197 if a function has been declared for export more than one time.

↑ Back to the top


Symptoms

The Linker output may be similar to the following:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll  Sample.obj
Sample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification
Creating library Sample.lib and object Sample.exp

↑ Back to the top


Cause

The Linker error number LNK4197 is generated when a function has been declared for export more than one time. A function is declared for export in one of the following ways:
  • The function is declared by using the __declspec(dllexport) keyword in your C source file:
    __declspec(dllexport) int DllSample() 
    {
    return 42;
    }
  • The function is declared by using a module-definition (.DEF) file:
    EXPORTS
    DllSample
This Linker error may occur most frequently when both the __declspec(dllexport) keyword and a .DEF file are used to define the same function name in a .DLL project.

↑ Back to the top


Resolution

To resolve this behavior, define exported functions only one time, either by using the __declspec(dllexport) keyword or by using a .DEF file. Do not use both of these methods.

↑ Back to the top


Status

This behavior is by design.

↑ Back to the top


More Information

Declaring a function for export more than one time may not produce the Linker error that is described in the "Symptoms" section of this article in 32-bit versions of the Microsoft Windows C++ Compiler and Linker. However, Microsoft recommends that you define function exports only one time in both 32-bit and 64-bit versions of the Windows C++ Compiler and Linker.

↑ Back to the top


Keywords: kbddk, kbprb, kb

↑ Back to the top

Article Info
Article ID : 835326
Revision : 4
Created on : 8/1/2019
Published on : 8/1/2019
Exists online : False
Views : 226