繁体   English   中英

在Visual Studio 2010中构建问题

[英]Build problem in 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 ==========

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

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

CS106B作业1

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

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

4.)启动Visual Studio2008并单击File-> New-> Project ...当给出选择时,选择创建一个新的Console程序。

5.)然后,您将看到一个包含多个文件的新项目,包括stdafx.h,stdafx.cpp和类似命名的文件,用于您之前提示的任何项目命名。 从项目中删除/删除所有这些文件。

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

7.)如果你在这一点编译,你会发现它仍在寻找stdafx.h预编译头。 我们来解决这个问题。 转到Project-> Assignment1 Properties ...(或者您的项目可能被命名)。 转到配置属性 - > C / C ++ - >预编译标题的“树”菜单中的选项。 在“创建/使用预编译”标题的选项下,选择“不使用预编译标头”的下拉选项。

8.)当您在此部分时,请花点时间选择此项目的头文件的位置。 在Configuration Properties-> C / C ++ - > General部分下,选择Additional Include Directories选项,然后使用...浏览并选择之前复制到项目文件夹的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命令正确构建。 编程愉快!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM