Проблема сборки в Visual Studio 2010 - PullRequest
4 голосов
/ 15 марта 2011

Я использую библиотеку CS106 в университете. После замены Visual Studio 2008 на Visual Studio 2010 у меня возникают проблемы с созданием новых или старых проектов. Я думаю, что новая 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 ]

8 голосов
/ 03 апреля 2011

Вот решение: http://melbsdailydigest.blogspot.com/

1.) Загрузите один из последних проектов с веб-сайта Stanford CS106B:

Назначение CS106B 1

2.) Разархивируйте проект и найдите его подкаталог \ CS106.Это папка, содержащая все библиотеки (CS106CPPLib.lib) и заголовочные файлы для программы CS106.

3.) Скопируйте эту папку как подкаталог в одну из папок назначения (например, C: \ Assignment1).\ CS106.

4.) Запустите Visual Studio2008 и выберите Файл-> Создать-> Проект ... Когда вам будет предложено выбрать создание новой Консольной программы.

5.) Затем выбыть представлен с новым проектом с несколькими файлами, включая stdafx.h, stdafx.cpp и файлы с аналогичными именами для того, что вы назвали свой проект, когда предложено ранее.УДАЛИТЬ / УДАЛИТЬ все эти файлы из проекта.

6.) Щелкните правой кнопкой мыши на папке «Исходный файл» и выберите «Добавить-> Существующий элемент… Выберите первый файл назначения (Assign1warmup.cpp).

7.) Если вы скомпилируете на этом этапе, вы поймете, что он все еще ищет скомпилированный заголовок stdafx.h.Давайте это исправим.Перейдите в Project-> Assignment1 Properties… (или как там может быть назван ваш проект).Перейдите к опции в меню «Дерево» для Свойства конфигурации-> C / C ++ -> Предварительно скомпилированные заголовки.Под опцией Создать / Использовать предварительно скомпилированный заголовок, выберите опцию раскрывающегося списка Не использовать предварительно скомпилированные заголовки.

8.) Пока вы находитесь в этом разделе, найдите время, чтобы также выбрать местоположение для заголовкафайлы для этого проекта.В разделе «Свойства конфигурации» -> «C / C ++ -> General» выберите параметр «Включить дополнительные каталоги» и используйте…, чтобы просмотреть и выбрать папку CS106, скопированную ранее в папку проекта.

9.) Последнийвещь, которую вы должны изменить здесь, находится в разделе Configuration Properties-> C / C ++ -> Code Generation.Измените значение по умолчанию (которое, как я считаю, для многопоточной отладки .DLL), просто на многопоточную отладку (или просто многопоточную, если вы делаете сборку релиза).

10.) Наконец, мыВам нужно сообщить компоновщику, где найти файл библиотеки CS106.Для этого вам нужно будет сделать 2 дополнительные настройки.Один из них находится в разделе «Свойства конфигурации» -> «Компоновщик» -> «Общие», где вы можете выбрать расположение дополнительных файлов библиотеки в разделе, озаглавленном «Достаточно соответствующие каталоги библиотеки».Вам также необходимо добавить свою библиотеку в проект через раздел «Дополнительные зависимости», который находится в разделе «Свойства конфигурации» -> «Линкер» -> «Ввод».Просто введите CS106CPPLIB.lib.

Примечание: я обнаружил, что, кажется, есть некоторая разница в меню, которое вы получаете, и в настройках, которые сохраняются, в зависимости от того, что вы выбрали в данный момент в окне обозревателя решений.Первоначально я внес все свои изменения, когда выбирал исходный файл, но в тот момент меню компоновщика не было.Мне пришлось перейти на уровень папки с исходными файлами, чтобы получить дополнительные меню, в которых я мог бы установить параметры своего компоновщика.Также важно отметить, что если вы сделаете ваши настройки на более низком уровне (т.е. файл Cpp), они, кажется, заменят все, что установлено на уровне выше.

На этом этапе проект должен корректно собираться свыбор команды Build-> Rebuild Solution.Удачного программирования!

1 голос
/ 15 марта 2011

Исходный код поможет исправить это.Но .... вы добавили #include <string> вверху файла, выдающего ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...