链接器错误:预编译库VC ++ 6.0与VC ++ 8.0程序

时间:2012-05-30 20:22:50

标签: visual-c++ linker microsoft-runtime-library

我正在尝试重新编译一些新系统的代码。它涉及一个预编译的静态库,我没有源代码(只是标题),而且这个库是用VC ++ 6.0或更旧的运行时库构建的。在我的旧系统上,有VC ++ 6.0,我的程序已经构建并运行正常,但我最近升级了一些东西,我不再能访问VC ++ 6.0,只有Express 2008(9.0 w / SP)。

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

  

1> libcpmtd.lib(xlock.obj):错误LNK2005:“public:__ thishisall   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:__ thishisall   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 个答案:

答案 0 :(得分:2)

从上一个链接错误中,找不到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是如何被引用的,因为你应该使用其中一个,而不是两者都有。)

答案 1 :(得分:1)

链接器告诉您某些符号被定义多次。设计链接器以产生目标图像的强力是使用/ FORCE:MULTIPLE作为explained here。我曾经使用过几次这个开关。

答案 2 :(得分:0)

  

LINK:致命错误LNK1104:无法打开文件'libcp.lib'

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

答案 3 :(得分:-1)

您可以在

中安装的MS Visual Studio 6.0中找到

libcp.lib

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

。目录

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