Linker Tools Error LNK2005
symbol already defined in object
The given symbol, displayed in its decorated form, was multiply defined.
- Accidentally linking with both the single-threaded and multithreaded libraries. Ensure that the application project file includes only the appropriate libraries and that any third-party libraries have appropriately created single-threaded or multithreaded versions.
- Mixing static and dynamic libraries when also using /clr.
- The symbol is a packaged function (created by compiling with /Gy) and was included in more than one file but was changed between compilations. Recompile all files that include symbol.
- The symbol is defined differently in two member objects in different libraries, and both member objects were used.
- An absolute is defined twice, with a different value in each definition.
- A header file declared and defined a variable. Possible solutions include:
- If you use uuid.lib in combination with other .lib files that define GUIDs (for example, oledb.lib and adsiid.lib). For example:
oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject already defined in uuid.lib(go7.obj)
To fix, add /FORCE:MULTIPLE to the linker command line options, and make sure that uuid.lib is the first library referenced.
For more information, see Knowledge Base articles,
- Q148652, PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries.
- Q140440, FIX: Global Overloaded Delete Operator Causes LNK2005
- Q184235, PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT
This error is followed by fatal error LNK1169.