#visual-c #boost #visual-studio-2013
#visual-c #boost #visual-studio-2013
Вопрос:
У меня установлено несколько версий Microsoft Visual C (2005, 2008, 2012, 2013).
Я переношу свой проект с VC 2008 на 2013.
Я установил для «набора инструментов платформы» значение «Visual Studio 2013 (v120)».
Я установил «Дополнительные каталоги библиотек» на «C:localboost_1_55_0lib32-msvc-12.0 » (где установлена новая версия Boost).
Пока у меня нет способа проверить, что код был скомпилирован с версией 12 (2013) компилятора. Я установил для «Подавить баннер запуска» значение «Нет». Единственные подробности, которые я получаю, это:
..src.cpp(371): warning C4996: 'gmtime': This function or variable may be unsafe. Consider using gmtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:Program Files (x86)Microsoft Visual Studio 9.0VCincludetime.inl(101) : see declaration of 'gmtime'
...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
...
1>boostlibs.lib(archive_exception.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with '....libdebugboostlibs.lib' or at 'C:UsersmeprjDebugvc90.pdb'; linking object as if no debug info
Эти строки, похоже, указывают на то, что используется версия компилятора 9.
Так ли это?
Как я могу установить другой компилятор? Как я могу проверить, что он действительно используется?
Как я могу заставить компилятор и компоновщик использовать определенную версию Boost? Я уже указал его путь в «Дополнительных каталогах включения» и в «Дополнительных каталогах библиотек».
Ответ №1:
Как я могу проверить, что он действительно используется?
Вы можете проверить версию макросов компилятора в своем исходном коде:
(возможно, с BOOST_STATIC_ASSERT(...)
помощью)
_MSC_FULL_VER
— Вычисляет основные, второстепенные компоненты и номер сборки номера версии компилятора. Старшее число — это первый компонент номера версии, разделенного точкой, младшее число — второй компонент, а номер сборки — третий компонент. Например, если номер версии компилятора Visual C равен 15.00.20706.01, макрос _MSC_FULL_VER вычисляется как 150020706. Введите cl /? в командной строке для просмотра номера версии компилятора.
_MSC_VER
— Вычисляется до основных и второстепенных числовых компонентов номера версии компилятора. Основное число — это первый компонент номера версии, разделенного точкой, а второстепенное число — второй компонент.Например, если номер версии компилятора Visual C равен 17.00.51106.1, макрос _MSC_VER принимает значение 1700.
Эти строки, похоже, указывают на то, что используется версия компилятора 9.
… они могут — с другой стороны, было бы возможно (предположение с моей стороны — у меня нет машины с несколькими версиями для проверки), что преобразование проекта было перепутано, и ваш проект VS2013 теперь содержит явные «ссылки» на все материалы VC9 ( vc90.pdb
явно заданные, включают путьиз VS2008 вместо правильного VS2013).
Обязательно проверьте настройки проекта
Как я могу заставить компилятор и компоновщик использовать определенную версию Boost?
Грубо говоря, версия Boost, которую вы используете, определяется порядком вашего пути включения. Следует использовать первую версию Boost, найденную в пути включения.
Поскольку заголовки Boost содержат прагмы компоновщика, вам не нужно явно устанавливать какие-либо входные данные компоновщика для файлов boost lib
. Конечно, правильные lib-файлы должны находиться в пути компоновщика.
Ответ №2:
После неудачной попытки установить компилятор на новую версию 12.0 с помощью графического интерфейса Visual C я вручную изменил *.vcxproj
файл, заменив все токены «9.0» на «12.0».
Теперь он использует правильный компилятор.