Visual Studio 2010中的构建问题

4
我在大学使用CS106库。在将Visual Studio 2008更改为Visual Studio 2010后,我在构建新项目或旧项目时遇到了问题。我认为新的Visual Studio与CS106库不兼容。请问有谁知道如何解决这个问题?
这是输出内容:

1>------ 开始构建: 项目: Blank, 配置: Debug Win32 ------ 1>构建开始于 3/15/2011 2:03:21 PM. 1>InitializeBuildStatus: 1> 正在接触 "Debug\Blank.unsuccessfulbuild"。 1>ClCompile: 1> 所有输出都是最新的。 1>CS106CPPLib.lib(strutils.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : 错误 LNK2019: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ),该符号在函数 "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) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(init.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(pcgraphics.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(strutils.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : 错误 LNK2019: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ),该符号在函数 "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) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(init.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(pcgraphics.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) 1>CS106CPPLib.lib(simpio.obj) : 错误 LNK2019: 无法解析的外部符号 "private: static void __cdecl std::locale::facet::facet_Register(class std::locale::facet *)" (?facet_Register@facet@locale@std@@CAXPAV123@@Z),该符号在函数 "public: void __thiscall std::locale::facet::_Register


1
尝试将错误格式化为人类可读的形式 :-) 我已将其格式化为代码,但缺少CR / LF。我还删除了c++builder标签,因为这个问题与c++ builder无关。 - Gregor Brandt
2
只是链接吗?你做了完整的重建吗? - Max
2个回答

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预编译标头。让我们来修复一下。进入“项目”->“Assignment1属性…”(或者您的项目可能被命名为其他名称)。转到“树”菜单中的“配置属性”->“C/C++”->“预编译标头”选项。在“创建/使用预编译标头”的选项下,选择“不使用预编译标头”的下拉选项。
8.) 当您在此部分时,现在花些时间选择此项目的头文件位置。在“配置属性”->“C/C++”->“常规”部分中选择“附加包含目录”选项,并使用…浏览并选择您之前复制到项目文件夹的CS106文件夹。
9.) 最后,在“配置属性”->“C/C++”->“代码生成”部分中更改默认设置(我相信这是多线程调试.DLL),只需更改为多线程调试(或者如果您正在进行发布构建,则只需更改为多线程)。
10.) 最后,我们需要让链接器知道在哪里找到CS106库文件。为此,您需要进行两个额外的设置。一个位于“配置属性”->“链接器”->“常规”部分,其中可以选择您的附加库文件的位置,该部分标题为“附加库目录”。您还需要通过“附加依赖项”部分将库添加到项目中,该部分位于“配置属性”->“链接器”->“输入”下。只需键入CS106CPPLIB.lib即可。
注意:我发现在解决方案资源管理器窗口中,根据您当前的选择,您获得的菜单和保存的设置似乎存在一些差异。我最初在选择实际源文件时进行了所有更改,但此时没有链接器菜单。我不得不上移到源文件夹级别以获取其他菜单,从而可以设置链接器选项。还要注意的是,如果您在较低级别(即Cpp文件)进行设置,则它们似乎会取代上面一级别中设置的任何内容。
此时,使用“生成”->“重新生成解决方案”命令应正确构建项目。 祝你编程愉快!

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接