我正在尝试重新编译一些新系统的代码。它涉及一个预编译的静态库,我没有源代码(只是标题),而且这个库是用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'
如何克服这个问题的任何想法都将非常受欢迎。
答案 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)
libcp.lib
c:\Program Files\Microsoft Visual Studio\VC98\Lib\
。目录
只需将其复制到您的MSVS 2005/2008/2010
lib目录即可
(即c:\Program Files\Microsoft Visual Studio 8\VC\lib\
)
一切都会很好地编译。