Visual c++ 链接器错误:将库VC++6.0与VC++8.0程序预组合

Visual c++ 链接器错误:将库VC++6.0与VC++8.0程序预组合,visual-c++,linker,microsoft-runtime-library,Visual C++,Linker,Microsoft Runtime Library,我正在尝试为新系统重新编译一些代码。它涉及一个预编译的静态库,我没有只用于头的源代码,这个库是用VC++6.0或更老的运行库构建的。在我的旧系统上,它有VC++6.0,我的程序构建和运行良好,但我最近升级了一些东西,我不再能够访问VC++6.0,只有Express 2008 9.0 w/SP 生成解决方案时,它会编译,但存在以下链接器错误: 1> libcpmtd.libxlock.obj:错误LNK2005:public:\uu thiscall std::\u Lockit::~\u Loc

我正在尝试为新系统重新编译一些代码。它涉及一个预编译的静态库,我没有只用于头的源代码,这个库是用VC++6.0或更老的运行库构建的。在我的旧系统上,它有VC++6.0,我的程序构建和运行良好,但我最近升级了一些东西,我不再能够访问VC++6.0,只有Express 2008 9.0 w/SP

生成解决方案时,它会编译,但存在以下链接器错误:

1> libcpmtd.libxlock.obj:错误LNK2005:public:\uu thiscall std::\u Lockit::~\u Lockitvoid??1_Lockit@std@@QAE@XZ已经定义 在NOREC.libtrack.obj 1>LIBCMT.libstdexcpt.obj中:错误LNK2005: public:\u thiscall std::bad\u cast::bad\u castchar const* ??0坏_cast@std@@QAE@PBD@Z已在NOREC.libtrack.obj中定义 1> LIBCMT.libstdexcpt.obj:错误LNK2005:public:\uu thiscall std::bad_cast::bad_cast类std::bad_cast常量& ??0坏_cast@std@@QAE@ABV01@@Z已在中定义 NOREC.libtrack.obj 1>LIBCMT.libstdexcpt.obj:错误LNK2005: public:virtual\uu thiscall std::bad\u cast::~bad\u castvoid ??1巴_cast@std@@UAE@XZ已在NOREC.libtrack.obj中定义 1> 链接:致命错误LNK1104:无法打开文件“libcp.lib”


任何关于如何克服这个问题的想法都是非常受欢迎的。

链接器告诉您一些符号被定义了不止一次。使用/force:MULTIPLE作为强制命令来说服链接器生成目标图像。我曾多次使用此开关。

链接器告诉您,某些符号定义了多次。使用/force:MULTIPLE作为强制命令来说服链接器生成目标图像。我曾多次使用此开关。

从上一个链接错误中,找不到libcp.lib。此库已从VS 2005中删除。对多线程版本使用/MT

多线程版本是libcpmt.lib,您将使用/MT标志自动获取它。我在第一个错误中看到,您使用的是libcpmtd.lib,它是同一版本的调试版本。如果您不使用/MTd,我不确定您是如何得到这些信息的。或者,如果您是,libcp.lib的引用方式,因为您应该使用其中一个,而不是使用上一个链接错误中的两个,因此无法找到libcp.lib。此库已从VS 2005中删除。对多线程版本使用/MT

多线程版本是libcpmt.lib,您将使用/MT标志自动获取它。我在第一个错误中看到,您使用的是libcpmtd.lib,它是同一版本的调试版本。如果您不使用/MTd,我不确定您是如何得到这些信息的。或者,如果是,则说明libcp.lib的引用方式,因为您应该使用其中一个,而不是两个

链接:致命错误LNK1104:无法打开文件“libcp.lib”

这是链接器中的错误。只需在LIBPATH中创建一个名为libcp.lib的空文件

链接:致命错误LNK1104:无法打开文件“libcp.lib”

这是链接器中的错误。只需在LIBPATH中创建一个名为libcp.lib的空文件。

libcp.lib您可以在中安装的MS Visual Studio 6.0中找到

c:\Program Files\Microsoft Visual Studio\VC98\Lib\ 
目录

只需将其复制到您的MSVS2005/2008/2010 lib目录 i、 e.c:\ProgramFiles\MicrosoftVisualStudio8\VC\lib\ 一切都会很好地编译。

libcp.lib您可以在中安装的MS Visual Studio 6.0中找到

c:\Program Files\Microsoft Visual Studio\VC98\Lib\ 
目录

只需将其复制到您的MSVS2005/2008/2010 lib目录 i、 e.c:\ProgramFiles\MicrosoftVisualStudio8\VC\lib\
一切都会被编译好。

谢谢,这将把第一组错误变成警告,希望不会有运行时错误。真正让我害怕的错误没有改变,致命错误LNK1104:无法打开文件'libcp.lib',我认为这与NOREC.lib需要过时的运行库这一事实有关。关于如何完成这项工作有什么想法吗?我的猜测是不会有运行时错误,因为这是一个链接失败,告诉您考虑了一个或多个LIB。正如Daver Rager所提到的,libcp.lib从VS2K5起就被删除了。从项目中删除此库。谢谢,这会将第一组错误变成警告,希望不会出现运行时错误。真正让我害怕的错误没有改变,致命错误LNK1104:无法打开文件'libcp.lib',我认为这与NOREC.lib需要过时的运行库这一事实有关。关于如何完成这项工作有什么想法吗?我的猜测是不会有运行时错误,因为这是一个链接失败,告诉您考虑了一个或多个LIB。正如Daver Rager所提到的,libcp.lib从VS2K5起就被删除了。从项目中删除此库。您所说的是正确的,但与本例无关-我正在使用/MT,但我没有编译调用该库的静态库。我想知道是否有办法克服这些困难
如果您使用/MT,请检查您的附加库路径,我不知道VS2008如何调用它,以确保libcpmtd.lib和libcp.lib不是手动添加的。它们基本上是同一运行时的不同版本,一个调试多线程,另一个单线程。由于单线程版本被完全删除,它绝对不应该出现在构建配置中。。。我知道这就是造成这个问题的原因,但我不知道是否有一种方法,我可以让这个工作。我假设这个方法既不简单也不优雅,但它可以让我的PhDI检查配置的时间减少6个月到一年,根本没有引用它。我认为静态库在这一点上不会有任何链接依赖性,因为从技术上讲,它们还没有链接。当然,这是女士。我以前和第三方DLL打过这些仗,但这是可以理解的。没有那么多。很抱歉,我没有更多。您所说的是真的,但与本例无关-我正在使用/MT,但我没有编译调用该库的静态库。我想知道是否有一种方法可以在不重建库的情况下解决这个问题我无法访问源代码。如果您使用/MT,请检查您的附加库路径我不知道VS2008如何调用它,以确保libcpmtd.lib和libcp.lib不是手动添加的。它们基本上是同一运行时的不同版本,一个调试多线程,另一个单线程。由于单线程版本被完全删除,它绝对不应该出现在构建配置中。。。我知道这就是造成这个问题的原因,但我不知道是否有一种方法,我可以让这个工作。我假设这个方法既不简单也不优雅,但它可以让我的PhDI检查配置的时间减少6个月到一年,根本没有引用它。我认为静态库在这一点上不会有任何链接依赖性,因为从技术上讲,它们还没有链接。当然,这是女士。我以前和第三方DLL打过这些仗,但这是可以理解的。没有那么多。对不起,我没有更多了。除了……别这样。只需在受支持的C运行时版本中链接即可。除了…不要这样做。只需链接到受支持的C运行时版本即可。