2

我正在尝试为新系统重新编译一些代码。它涉及一个预编译的静态库,我没有它的源代码(只有标头),并且该库是使用 VC++ 6.0 或更早版本以及较旧的运行时库构建的。在具有 VC++ 6.0 的旧系统上,我的程序构建并运行良好,但我最近升级了一些东西,我不再可以访问 VC++ 6.0,只能访问 Express 2008 (9.0 w/SP)。

当我构建解决方案时,它会编译但有以下链接器错误:

1>libcpmtd.lib(xlock.obj) : 错误 LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) 已经在 NOREC.lib(track .obj) 1>LIBCMT.lib(stdexcpt.obj) : 错误 LNK2005: "public: __thiscall std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QAE@PBD@Z) 已经定义在 NOREC.lib(track.obj) 1>LIBCMT.lib(stdexcpt.obj) 中:错误 LNK2005: "public: __thiscall std::bad_cast::bad_cast(class std::bad_cast const &)" (??0bad_cast@std @@QAE@ABV01@@Z) 已在 NOREC.lib(track.obj) 1>LIBCMT.lib(stdexcpt.obj) 中定义:错误 LNK2005:“public: virtual __thiscall std::bad_cast::~bad_cast(void) " (??1bad_cast@std@@UAE@XZ) 已在 NOREC.lib(track.obj) 1>LINK 中定义:致命错误 LNK1104:无法打开文件 'libcp.lib'

任何如何克服这个问题的想法都将受到欢迎。

4

4 回答 4

4

从最后一个链接错误,libcp.lib找不到了。自 VS 2005 起,该库已被删除。/MT用于多线程版本。

http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.80%29.aspx

多线程版本是您将使用标志libcpmt.lib自动获得的版本。/MT我在您使用的第一个错误中看到libcpmtd.lib它是相同的调试版本。如果您不使用/MTd. (或者如果你是,如何libcp.lib引用,因为你应该使用其中一个,而不是两者)

于 2012-05-30T20:53:18.097 回答
1

链接器告诉您某些符号被多次定义。说服链接器生成目标图像的蛮力是使用 /FORCE:MULTIPLE ,如此处所述。这个开关我用过几次。

于 2012-05-30T20:41:11.337 回答
0

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

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

于 2012-07-25T18:03:13.663 回答
-1

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

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

目录。

只需将其复制到您的MSVS 2005/2008/2010lib 目录(即c:\Program Files\Microsoft Visual Studio 8\VC\lib\),一切都会编译得很好。

于 2013-07-31T08:02:53.693 回答