неразрешенные символы после преобразования решения VS2012 Windows 8 Metro в VS2013 (в Windows 8.1)

У меня есть вопрос, который я в настоящее время не могу эффективно решить, так как я все еще не знаком с разработкой приложений Metro. Так что, пожалуйста, потерпите со мной:)

короче говоря, у меня есть большой, сложный VS2012 Metro app managed+native solution (в настоящее время встроенный в Windows 8) в VS2013 для Windows 8.1.

я импортировал решение в VS2013 (размещенный в Windows 8.1) и запустил преобразование для него и всех вложенных проектов в нем. Материал компилируется, но он с линкер, с которым мы сталкиваемся. Это пример ошибок компоновщика, которые мы получаем:

    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol _getenv referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___endthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsnbicmp referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___dupenv_s referenced in function <blahblahblah>

дело в том, что для каждого символа, который "отсутствует", мы можем видеть, что декларация присутствует в заголовочных файлах MS Windows, поставляемых с VS2013. Проверка ссылок в каждом подпроекте показывает, что они ссылаются на "основные" библиотеки Windows.

любые идеи, почему это происходит? Спасибо.

1 ответов


мы видим, что объявление присутствует в заголовочных файлах MS Windows, поставляемых с VS2013. Проверка ссылок в каждом подпроекте показывает, что они ссылаются на "основные" библиотеки Windows

будет трудно диагностировать, что пошло не так с этой небольшой информацией, но довольно ясно, что вы ищете в совершенно неправильном углу для этой проблемы. Недостающие символы не функции api Windows, они с функции поддержки времени выполнения. Они только используется в проекте C++, вы смотрели на .NET-проекты.

поэтому вам нужно сосредоточиться на одном проекте, который генерирует эти ошибки компоновщика, это проект C++. Команда компоновщика, которая выдается, чтобы получить ссылку на нее .lib, который имеет эти символы, полностью автоматизирован, поэтому не так много может пойти не так. Самое первое, что нужно сделать, это заставить полную перестройку, чтобы она не использовала устаревшие.obj and .движение за освобождение файлы, которые остались от предыдущей сборки в VS2012. Щелкните правой кнопкой мыши проект и выберите Восстановить.

и стоит взглянуть на .файл vcxproj для этого проекта с текстовым редактором (например, блокнот) и убедитесь, что преобразование прошло правильно и внесены правильные изменения:

  • свойство ToolsVersion должно быть изменено с "4.0"на " 12.0"
  • свойство MinimumVisualStudioVersion должно быть изменено с 11.0 на 12.0
  • добавлены два новых свойства: ApplicationType (Магазин Windows) и ApplicationTypeRevision (8.1)
  • свойство PlatformToolset каждой конфигурации должно быть изменено с v110 на v120

существует файл журнала в Debug\projectname.tlog каталог с именем link.читать.1.tlog, который содержит диагностику, показывает все .lib-файлы, которые использует компоновщик. Он должен содержать следующую строку:

C:\PROGRAM файлы (X86)\MICROSOFT VISUAL STUDIO 12.0\VC\LIB\STORE\VCCORLIBD.Либ!--3-->

, который является .lib-файл, содержащий эти символы.