Создание форсированного питона для msvc с python3 - ошибка компоновщика - PullRequest
0 голосов
/ 16 мая 2018

Я портирую 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'

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Проблема, о которой вы упоминаете:

LNK1104: не удается открыть файл 'libboost_pythonPY_MAJOR_VERSIONPY_MINOR_VERSION-vc120-mt-gd-x32-1_67.lib'

решена это коммит.

, чтобы получить полный контекст проблемы, вы можете проверить this

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

Я не смог решить эту ошибку, но я нашел здесь набор предварительно скомпилированных библиотек: https://www.lfd.uci.edu/~gohlke/pythonlibs/

...