Visual studio visualc&x2B+;运行库链接器的困境
观察这个接近的场景,即使它看起来与我前面的问题相同。我仍然没有得到答案因此请不要重复报告。 我有一个项目,其中有10个依赖项。首先,我在主项目的C/C++代码生成部分使用/MTD选项进行编译,它的所有依赖项都得到了成功构建 接下来,我将选项从/MTD更改为/MDd,并且所有相关项目都将获得 成功构建。但对于主项目,报告了以下错误:Visual studio visualc&x2B+;运行库链接器的困境,visual-studio,visual-c++,visual-studio-2005,linker,msvcrt,Visual Studio,Visual C++,Visual Studio 2005,Linker,Msvcrt,观察这个接近的场景,即使它看起来与我前面的问题相同。我仍然没有得到答案因此请不要重复报告。 我有一个项目,其中有10个依赖项。首先,我在主项目的C/C++代码生成部分使用/MTD选项进行编译,它的所有依赖项都得到了成功构建 接下来,我将选项从/MTD更改为/MDd,并且所有相关项目都将获得 成功构建。但对于主项目,报告了以下错误: LIBCMTD.lib(osfinfo.obj):错误LNK2005:\u open\u osfhandle已在msvcrd.lib(MSVCR80D.dll)中定
LIBCMTD.lib(osfinfo.obj):错误LNK2005:\u open\u osfhandle已在msvcrd.lib(MSVCR80D.dll)中定义
LIBCMTD.lib(lseeki64.obj):错误LNK2005:u lseeki64已在msvcrd.lib(MSVCR80D.dll)中定义
sqlite3x.lib(sqlite3x_command.obj):错误LNK2005:“受保护:wchar_t*uu thiscall std::basic_字符串::_Myptr(void)”(?_Myptr@$basic_string@_WU?$char_traits@_W@性病病毒$allocator@_W@2@@std@@IAEPA_WXZ)已在msvcprtd.lib(MSVCP80D.dll)中定义
msvcrdt.lib(MSVCR80D.dll):错误LNK2005:_mkdir已在LIBCMTD.lib(mkdir.obj)中定义
msvcrdt.lib(MSVCR80D.dll):错误LNK2005:uu strdup已在中定义
LIBCMTD.lib(strdup.obj)
创建库Debug/Application.lib和对象Debug/Application.exp
链接:警告LNK4098:defaultlib'msvctd'与其他lib的使用冲突;使用/NODEFAULTLIB:library
链接:警告LNK4098:defaultlib'LIBCMTD'与其他lib的使用冲突;使用/NODEFAULTLIB:library
如何修复此问题?不能混合使用C运行时库。如果您有一个已编译的库或对象/MT(任何内容),则不能仅链接到/MD。您需要链接到threadsafe MSVCRT。没有关于它的“如果”和“是”或“但是”。不能混合使用C运行时。我总是发现最好只使用/MT,即使在不执行线程的程序中也是如此
是否运行项目清理操作以删除已生成的对象和库?您在这里也依赖SQLite,您也重建了它吗>P>当一组静态C++库全部链接在一起时,它们都必须有/MTD,或者它们都必须有/ MDd.You不能将项目与/MTD与MD/另一个项目连接起来。 这可能是导致链接错误的原因。你之所以只在你的主项目上得到它,是因为你的主项目是唯一一个真正进行链接的项目。请告诉我们它是否解决了你的问题
我记得我曾经遇到过与/MTD和/MDd相同的问题,我也有过类似的错误。我的答案可能会有所帮助,链接到一些MSDN文章,我发现这些文章对解决我的问题版本非常有用。编辑原始问题添加更多细节,而不是重复问题。如果你更新了这个问题,它将被移回头版。或者,添加悬赏以获得更多关注。投票赞成结束的人也可以链接到副本吗?谢谢,重复:
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)" (?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@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