我发现了其他人遇到这个问题的例子,但他们的解决方案没有运气。我正在尝试在一个静态库中使用 std::cout,该库也使用 boost 线程和绑定。当我不使用它并且std::cout
它编译并与主程序链接很好但是当我这样做并且我编译库时我没有问题但是当我编译和链接使用静态库的主程序时我得到了很多类似的东西:
2>LIBCMT.lib(crt0init.obj) : 错误 LNK2005: ___xi_z 已在 MSVCRTD.lib(cinitexe.obj) 中定义 2>LIBCMT.lib(crt0init.obj) : 错误 LNK2005: ___xc_a 已在 MSVCRTD.lib(cinitexe.obj) 中定义 2>LIBCMT.lib(crt0init.obj) : 错误 LNK2005: ___xc_z 已在 MSVCRTD.lib(cinitexe.obj) 中定义 2>LIBCMT.lib(mlock.obj) : 错误 LNK2005: __unlock 已在 MSVCRTD.lib(MSVCR100D.dll) 中定义 2>LIBCMT.lib(mlock.obj) : 错误 LNK2005: __lock 已在 MSVCRTD.lib(MSVCR100D.dll) 中定义 2>LIBCMT.lib(winxfltr.obj) : 错误 LNK2005: __XcptFilter 已在 MSVCRTD.lib(MSVCR100D.dll) 中定义 2>LIBCMT.lib(crt0.obj) : 错误 LNK2005: _mainCRTStartup 已在 MSVCRTD.lib(crtexe.obj) 中定义
ETC...
我尝试进入我的链接器设置并阻止它使用错误输出中列出的冲突库,但我无法正确处理。如果我告诉它停止使用一个库,它可能会解决问题但给我一些丢失的外部符号,然后我切换它有问题的库,但我仍然得到一些“已经定义”的库。我可以做些什么来解决这个问题的任何线索?我是否应该只创建另一个名为“log”的类或其他东西,然后从主 .exe 访问它(它将使用字符串库,这可能会再次导致问题,但我还没有尝试过)?感谢您的任何帮助。