Visual C++运行时库链接程序的问题

问题描述:

观察这个关闭方案,即使它看起来与我以前的问题相同。我仍然没有得到答案。 所以请不要重复报告。Visual C++运行时库链接程序的问题

我有一个项目有10个依赖项。首先,我在主项目的C/C++代码生成部分使用/ MTD选项进行编译,并且所有依赖项都已成功生成。

接下来我将选项从/ MTD更改为/ MDd,并且所有依赖项目都再次成功建立 。但对于主要项目如下错误报告:


LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRTD.lib(MSVCR80D.dll) 

LIBCMTD.lib(lseeki64.obj) : error LNK2005: __lseeki64 already defined in MSVCRTD.lib(MSVCR80D.dll) 


sqlite3x.lib(sqlite3x_command.obj) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Myptr(void)" ([email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@IAEPA_WXZ) already defined in msvcprtd.lib(MSVCP80D.dll) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __mkdir already defined in LIBCMTD.lib(mkdir.obj) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in 
LIBCMTD.lib(strdup.obj) 

    Creating library Debug/Application.lib and object Debug/Application.exp 
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

我该如何解决这个问题?

+0

编辑您的原始问题添加更多的细节,而不是重复的问题。如果你更新了这个问题,它会被移回到首页。或者,添加赏金以获得更多关注。 – tvanfosson 2009-06-01 14:58:58

您不能混合使用C运行时库。如果你有一个库或对象编译/ MT(任何),你不能只与/ MD链接。您需要链接到线程安全的MSVCRT。没有如果和但或只是关于它。你不能混合C运行时。即使在不使用线程的程序中,我总是发现它最好,只是使用/ MT。

您是否运行过项目清理操作来删除已经建好的对象和库?在这里你也依赖于SQLite,你是否也重建过它?

当库的静态C++一堆链接都在一起,他们都必须有/ MTD或它们都必须与/ MTD与/ MDD

另一个项目/MDd.You不能链接项目这可能是您的链接错误的原因。你只在你的主要项目上得到它的原因是你的主要项目是唯一真正做链接的项目。请告诉我们它是否解决了你的问题。

我记得我曾经有与/ MTD和/ MDd相同的问题,我有非常类似的错误。

我的回答here可能有一些帮助,链接到一些MSDN文章,我发现在解决我的这个问题的版本非常有用。