Я портирую Python Libary с python 2.7 на 3.6 на новой установленной Win10 с VS2013 и Anaconda Python 3.6 64bit.
В libariy есть dll, которая использует boost python в качестве оболочки для python, поэтому япридется перекомпилировать это.Поскольку предыдущие библиотеки Boost были скомпилированы для Python 2.7, я снова начал с нового boost_1_63_0 и скомпилировал его со следующими настройками в project-config.jam
import option ;
using msvc = 12.0;
using python : 3.6 : C:\\ProgramData\\Anaconda3 ;
option.set keep-going : false ;
, используя эти параметры
bjam.exe --with-python address-model=64 variant=release link=shared
--build-type=complete
Я получаю полный набор скомпилированных библиотек:
└───lib
boost_numpy36-vc120-mt-x64-1_67.dll
boost_numpy36-vc120-mt-x64-1_67.lib
boost_python36-vc120-mt-x64-1_67.dll
boost_python36-vc120-mt-x64-1_67.lib
...
libboost_python36-vc120-mt-gd-x32-1_67.lib
libboost_python36-vc120-mt-gd-x64-1_67.lib
libboost_python36-vc120-mt-x32-1_67.lib
libboost_python36-vc120-mt-x64-1_67.lib
...
libboost_numpy36-vc120-mt-gd-x32-1_67.lib
libboost_numpy36-vc120-mt-gd-x64-1_67.lib
libboost_numpy36-vc120-mt-x32-1_67.lib
libboost_numpy36-vc120-mt-x64-1_67.lib
Поскольку у меня были некоторые проблемы с компоновщиком, я запустил новый Soulution в Visual Studio.Необходимые папки boost и Pyton были добавлены в проект C / C ++ -> general -> дополнительные каталоги Include, а также папка stage\libs
boost и папка libs
python были добавлены в дополнительные каталоги libary для компоновщика.
Я пытаюсь скомпилировать приведенный ниже минимальный пример, который отлично работает на моей другой системе, которая все еще работает на старой сборке на основе Python 2.7:
#include "stdafx.h"
#define BOOST_PYTHON_STATIC_LIB
#define BOOST_LIB_NAME "boost_numpy"
#include <boost/config/auto_link.hpp>
#include <boost/python/numpy.hpp>
#include <boost/python.hpp>
#include <boost/python/numpy.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
При компиляции я получаю следующую ошибку компоновщика
LNK1104: cannot open file 'libboost_numpy-vc120-mt-x64-1_67.lib'
По какой-то причине сборка создает библиотеку с именем boost_numpy36-vc120-mt-x64-1_67.lib
, но компоновщик все еще ищет версию без версии Python 36
.
Когда я просто удаляю версию Python из библиотеки, я получаю следующую ошибку компоновщика:
LNK1104: cannot open file 'libboost_pythonPY_MAJOR_VERSIONPY_MINOR_VERSION-vc120-mt-gd-x32-1_67.lib'
Есть идеи, что здесь происходит?
[обновление]
Хорошо, поэтому после нахождения этого вопроса я понял, что имя связано с определением BOOST_LIB_NAME
, поэтому я изменил его на
#define BOOST_LIB_NAME "boost_numpy36"
Но, к сожалению, я все еще получаю вторую ссылку:
LNK1104: cannot open file 'libboost_pythonPY_MAJOR_VERSIONPY_MINOR_VERSION-vc120-mt-gd-x32-1_67.lib'