libcmt.lib和msvcrtd.lib的冲突问题

今天在编译一个程序时,发生了下面的错误。

libcmt.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR80D.dll)

 

调查发现,编译程序中调用的DLL是使用动态链接进行编译的,但是这个程序又链接了一个使用静态链接的库,这两个库恰好又同时用到了sprintf这个函数,这就导致了命名冲突的问题,将两个库都使用动态链接后就改好了这个问题。

MSDN上有一篇文章讲了静态和动态链接的区别。

http://msdn.microsoft.com/en-us/library/abx4dbyh%28VS.80%29.aspx