Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio visualc&x2B+;运行库链接器的困境_Visual Studio_Visual C++_Visual Studio 2005_Linker_Msvcrt - Fatal编程技术网

Visual studio visualc&x2B+;运行库链接器的困境

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)中定

观察这个接近的场景,即使它看起来与我前面的问题相同。我仍然没有得到答案因此请不要重复报告。

我有一个项目,其中有10个依赖项。首先,我在主项目的C/C++代码生成部分使用/MTD选项进行编译,它的所有依赖项都得到了成功构建

接下来,我将选项从/MTD更改为/MDd,并且所有相关项目都将获得 成功构建。但对于主项目,报告了以下错误:


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