我正在尝试为新系统重新编译一些代码。它涉及一个预编译的静态库,我没有源代码(只有标头),并且该库是使用 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) 已定义 in NOREC.lib(track.obj) 1>LIBCMT.lib(stdexcpt.obj) : error 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) : error LNK2005: "公共:虚拟__thiscall标准::bad_cast::~bad_cast(无效)" (??1bad_cast@std@@UAE@XZ) 已在 NOREC.lib(track.obj) 中定义 1>链接:致命错误LNK1104:无法打开文件"libcp.lib"
任何如何克服这个问题的想法都将非常受欢迎。
从最后一个链接错误中,找不到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
,因为你应该使用一个或另一个,而不是两个)
链接器告诉您某些符号被多次定义。使链接器生成目标图像的暴力破解是使用/FORCE:MULTIPLE,如此处所述。我曾经使用过几次这个开关。
链接:致命错误LNK1104:无法打开文件"libcp.lib"
这是链接器中的一个错误。只需在 LIBPATH 中创建一个名为 libcp.lib 的空文件即可。
已安装的MS Visual Studio 6.0中找到libcp.lib
c:Program FilesMicrosoft Visual StudioVC98Lib
目录。
只需将其复制到您的MSVS 2005/2008/2010
库目录(即 c:Program FilesMicrosoft Visual Studio 8VClib
)一切都会编译得很好。