在Visual Studio 2010中构建问题

时间:2011-03-15 10:49:01

标签: visual-studio-2010

我在大学使用CS106库。用Visual Studio 2010更改Visual Studio 2008后,我在构建新项目或旧项目方面遇到了问题。我认为新的Visual Studio与CS106库不兼容。任何人都可以告诉我们如何解决这个问题?

这是输出:

1>------ Build started: Project: Blank, Configuration: Debug Win32 ------ 1>Build started 3/15/2011 2:03:21 PM. 1>InitializeBuildStatus: 1> Touching "Debug\Blank.unsuccessfulbuild". 1>ClCompile: 1> All outputs are up-to-date. 1>CS106CPPLib.lib(strutils.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) referenced in function "public: class std::basic_string,class std::allocator > & __thiscall std::basic_string,class std::allocator >::assign(class std::basic_string,class std::allocator > const &,unsigned int,unsigned int)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z) 1>CS106CPPLib.lib(genlib.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(init.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(pcgraphics.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(strutils.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) referenced in function "protected: bool __thiscall std::basic_string,class std::allocator >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z) 1>CS106CPPLib.lib(genlib.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(init.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(pcgraphics.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : error LNK2019: unresolved external symbol "private: static void __cdecl std::locale::facet::facet_Register(class std::locale::facet *)" (?facet_Register@facet@locale@std@@CAXPAV123@@Z) referenced in function "public: void __thiscall std::locale::facet::_Register(void)" (?_Register@facet@locale@std@@QAEXXZ) 1>CS106CPPLib.lib(strutils.obj) : error LNK2001: unresolved external symbol "private: static void __cdecl std::locale::facet::facet_Register(class std::locale::facet *)" (?facet_Register@facet@locale@std@@CAXPAV123@@Z) 1>CS106CPPLib.lib(simpio.obj) : error LNK2001: unresolved external symbol "long const std::_BADOFF" (?_BADOFF@std@@3JB) 1>CS106CPPLib.lib(strutils.obj) : error LNK2001: unresolved external symbol "long const std::_BADOFF" (?_BADOFF@std@@3JB) 1>Debug\Blank.exe : fatal error LNK1120: 4 unresolved externals 1> 1>Build FAILED. 1> 1>Time Elapsed 00:00:00.97 ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

2 个答案:

答案 0 :(得分:8)

以下是解决方案: http://melbsdailydigest.blogspot.com/

1.。)从斯坦福CS106B网站下载最新项目之一:

CS106B Assignment 1

2。)解压缩项目并找到其子目录\ CS106。这是包含CS106程序的所有库(CS106CPPLib.lib)和头文件的文件夹。

3。)将此文件夹作为子目录复制到其中一个分配文件夹(例如C:\ Assignment1 \ CS106。

4。)启动Visual Studio2008并单击文件 - >新建 - >项目...当给出选择时,选择创建新的控制台程序。

5。)然后,您将看到一个包含多个文件的新项目,包括stdafx.h,stdafx.cpp以及类似命名的文件,以便在您之前提示时为您的项目命名。从项目中删除/删除所有这些文件。

6。)右键单击源文件夹并选择添加 - >现有项目...选择第一个分配文件(Assign1warmup.cpp)。

7。)如果你在这一点编译,你会发现它仍然在寻找stdafx.h预编译头。我们来解决这个问题。转到项目 - >分配1属性...(或任何您的项目可能被命名)。转到配置属性 - > C / C ++ - >预编译标题的“树”菜单中的选项。在Create / Use Precompiled header的选项下,选择Not Used Precompiled headers的下拉选项。

8。)当您在本节中时,请花点时间选择此项目的头文件的位置。在配置属性 - > C / C ++ - >常规部分下,选择其他包含目录选项,然后使用...浏览并选择之前复制到项目文件夹的CS106文件夹。

9.。)你应该在这里更改的最后一件事是配置属性 - > C / C ++ - >代码生成部分。将默认值(我认为是针对多线程调试.DLL)更改为多线程调试(如果您正在进行发布版本,则更改为多线程)。

10。)最后,我们需要让链接器知道在哪里可以找到CS106库文件。为此,您需要进行2个额外设置。一个是在Configuration Properties-> Linker-> General部分,您可以在标题足够合适的部分 - “Additional Library Directories”中选择其他库文件的位置。您还需要通过Configuration Properties-> Linker-> Input下的“Additional Dependencies”部分将您的库添加到项目中。只需输入CS106CPPLIB.lib。

注意:我发现您获得的菜单和保存的设置似乎有所不同,具体取决于您在解决方案资源管理器窗口中的选择。我在选择实际源文件时最初做了所有更改,但此时没有链接器菜单。我不得不升级到源文件夹级别以获得我可以设置链接器选项的其他菜单。另外需要注意的是,如果你在较低级别(即Cpp文件)进行设置,它们似乎会取代在它上面的级别中设置的任何内容。

此时,项目应该通过选择Build-> Rebuild Solution命令正确构建。 快乐的节目!

答案 1 :(得分:1)

源代码有助于解决此问题。但....你是否在文件顶部添加#include <string>产生错误?