Я пытаюсь скомпилировать старый проект VS2010 в VS2015 с помощью boost.python 1_67_0 из 1_53 и python 35.
Скомпилировать его было не так уж сложно, всего лишь несколько настроек, чтобы включить путь и обновить пару строк обработки 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? (т.е. это то, что я пропустил в конфигурации?)
Итак, перейдя в «Менеджер свойств» и просмотрев свойства проекта> Компоновщик> Все параметры, вы нашли библиотеку. Но теперь у меня есть LINK : fatal error LNK1104: cannot open file 'boost_pythonPY_MAJOR_VERSIONPY_MINOR_VERSION-vc140-mt-gd-x32-1_67.lib', который, я уверен, происходит, потому что PY_MAJOR_VERSION и PY_MINOR_VERSION где-то не определены ...
У меня есть только boost 1_67, он был только что загружен и собран, и все библиотеки там. Это был не буст, а просто какое-то свойство проекта, подключенное к конфигурации.





В 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
Boost может определить, какие библиотеки необходимо связать при его создании. Итак, основная диагностика заключается в том, что вы не восстанавливали ускорение. Кто знает, никто не любит жевать фольгу. Рассмотрите возможность перехода к работе кто-нибудь еще.