Компоновщик VisualStudio 2015 ищет библиотеку VS 2010 - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь скомпилировать старый проект VS2010 в VS2015 с boost.python 1_67_0 из 1_53 и python 35.

Получить компиляцию было не так уж и сложно, всего несколько настроек, чтобы включить path и обновить пару обработчиков строк Python 2 до Python 3.

Но я застрял при связывании, потому что компоновщик не работает по адресу:

LINK : fatal error LNK1104: cannot open file 'boost_python-vc100-mt-gd-1_67.lib'

Что на самом деле не имеет смысла, потому что версия библиотеки должна быть vc140. В пути к библиотеке существуют опции libboost_python35-vc140-mt-gd-x32-1_67.lib и несколько других libboost_python35-vc140 *.

Откуда он получает имя 'boost_python-vc100-mt-gd-1_67.lib'? (т.е. это то, что я пропустил в конфигурации?)

1 Ответ

0 голосов
/ 07 мая 2018

В Visual Studio Boost используется boost / configure / auto_link.hpp для генерации имен библиотек и добавления их к зависимостям компоновщика. Одним из аргументов этого фрагмента кода является BOOST_LIB_NAME, который для boost :: python определен в boost / python / detail / config.hpp. В версии 1_67_0 это в настоящее время:

#define BOOST_LIB_NAME boost_python##PY_MAJOR_VERSION##PY_MINOR_VERSION

Где python patchlevel.h имеет определения для PY_MAJOR_VERSION и PY_MINOR_VERSION.

Это означает, что имя библиотеки не нужно явно добавлять в проект Visual Studio. Просто путь к каталогу буст-библиотек.

Мне нужно было удалить любые (повысить) имена библиотек из:

  • Свойства конфигурации> Линкер> Вход> Дополнительные зависимости
  • Свойства конфигурации> Линкер> Все параметры> Дополнительные зависимости

И нужно было убедиться, что я создал boost :: python с разделяемыми (dll) библиотеками, поскольку собирал DLL. Статические библиотеки - libboost * .lib, а общие библиотеки - boost * .lib. Для принудительного создания общих библиотек я использовал:

C:\dev\boost\boost_1_67_0> b2.exe link=shared,static --with-python -a

...