编译动态DLL(其中调用了几个静态的DLL),出错:
msvcrtd.lib(MSVCRTD.dll) : warning LNK4006: _sprintf already defined in libcmt.lib(sprintf.obj);
second definition ignored
msvcrtd.lib(MSVCRTD.dll) : warning LNK4006: _sprintf already defined in libcmt.lib(sprintf.obj);
second definition ignored
改正方法:#ifndef ****
#define ****
#endif
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _atoi already defined in libcmt.lib(atox.obj)
可以使用链接器的/VERBOSE:LIB 开关来确定链接器所搜索的的库(property->linker->command line->additional options编辑框中加入/VERBOSE:LIB ),可以告诉链接器忽略不正确的链接器,在property->linker->Input->Ignore Specific Libary里输入不正确的运行库或者使用/NODEFAULTLIB:library 开关。
下表显示根据你所用的运行库哪些是用忽略的
To use this run-time library Ignore these libraries
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcd.lib, libcmtd.lib例如如果你想创建一个使用non-debug, single-threaded版本的运行库,并收到了警告,可以使用下面的开关,(设置同/VERBOSE:LIB)
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;148652