Настойчивое изучение Boost-Python (Boost 1_64_0, Python3.6 и msvc 14.0)

Я пытался перейти на уровень 0 с использованием Boost-Python (в Windows 10 с установленными VS2015 и Python 3.6), а именно с созданием учебного пособия, в основном за последние полные 3 дня. Сначала я попытался пройти официальный учебник:- http://www.boost.org/doc/libs/1_64_0/libs/python/doc/html/tutorial/tutorial/hello.html но он не будет работать. Мне кажется, что пример установки таков, что ему нужен Jamfile в каталоге tutorial и Jamroot в родительском каталоге.

После исследования / поиска я начал ответ на вопрос:- Не могу запустить bjam для компиляции Boost Python Tutorial В настоящее время я застрял с

фатальная ошибка C1083: не удается открыть файл включения: 'boost/python/module.hpp': такого файла или каталога нет

Я буду продолжать пытаться, но первый вопрос:-

1) Мне кажется, я должен быть в состоянии собрать, используя bjam.exe со следующими файлами в boost_1_64_0 \ libs \ python \ tutorial: hello.cpp, hello.py, немного .lib (например, boost_python3-vc140-mt-gd-1_64.lib или что-то еще), подходящий Jamfile, bjam.exe в учебном каталоге и подходящем Jamroot в родительском каталоге и user-config.jam в моей ГЛАВНОЙ. Это правильно?

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

ССЫЛКА: фатальная ошибка LNK1207: несовместимый формат PDB в 'C:\Program Files\boost\boost_1_64_0\libs\python\example\tutorial\hello_ext.pdb'; удалите и перестройте вызов "C:\Users\DIAMON~1\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_x86.cmd" nul link /NOLOGO /INCREMENTAL:NO /DLL /NOENTRY /DEBUG /MACHINE:X86 /MANIFEST / подсистема: консоль /out:"hello_ext.dll" /IMPLIB:"hello_ext.pdb" /LIBPATH:"C:\Users\DiamondExp\AppData\Local\Programs\Python\Python36-32\libs" @"hello_ext.dll.rsp"

если% ERRORLEVEL% NEQ 0 EXIT% ERRORLEVEL%

... ошибка msvc.link.dll hello_ext.dll hello_ext.pdb hello_ext.pdb...

и затем я потерял - я должен очень позорно признать - частично работающий Jamfile/Jamroot, когда я тупо удалил весь свой каталог boost, чтобы начать из "чистого состояния". был действительно глуп Я так и не смог найти что-нибудь, чтобы пойти от этой фатальной ошибки LNK1207.

Я очень хочу попасть в этот Boost-Python материал, который бы сделал мою жизнь намного проще. Поэтому я был бы очень благодарен за любой вклад от опытного пользователя Boost-Python и / или Boost.Build и, возможно, получить любое количество ответов на следующие конкретные вопросы:

2) Как мне изменить мои "libs \ python \ example \ Jamroot" (в частности, после "") и "libs \ python \ example \ tutorial \ Jamfile"? Текущее состояние воспроизводится ниже. Что будет так называемым "местоположением по умолчанию" для Boost.Python?

3) Это хорошая альтернатива ditch bjam.exe и попытка сборки с VisualStudio 2015 напрямую? Как там: Сборка / включая Boost.Python в VS2013

4) Из нескольких постов видно, что что-то случилось после Boost 1_55. Несколько человек не могли заставить его работать. Любая известная проблема совместимости между Boost-Python и msvc14.0 или Python 3.x? Например: Скомпилируйте руководство по boost-python с VS-2015 CTP 5 и Python 3.5a на Windows 10 TP.

5) Я запутался в 32-битной / 64-битной вещи. У меня установлена ​​64-битная ОС (Windows10) и 32-битная версия Python. Чему должен соответствовать мой "параметр модели адреса" при вызове b2.exe? это имеет значение вообще?

6) стоит ли здесь использовать.dll, а не.lib?

Надеюсь, кто-то так далеко...

Jamfile: (ничего не изменено по умолчанию)

import python ;

project tutorial
  : requirements
    <location>.
    ;

python-extension hello_ext : hello.cpp ;

run-test hello : hello_ext hello.py ;

alias test : hello ;
explicit test ;

Джамрут:

import python ;

if ! [ python.configured ]
{
  ECHO "warning: no Python configured in user-config.jam" ;
  ECHO "warning: will use default configuration" ;
  using python ;
}

# Adjust the following if Boost.Python isn't installed in a default location
lib boost_python ;

project
  : requirements
    <include>C:\\Users\\DiamondExp\\Downloads\\boost_1_64_0\\boost_1_64_0\\boost\\python
    <library>boost_python
;

rule run-test ( test-name : sources + )
{
  import testing ;
  testing.make-test run-pyd : $(sources) : : $(test-name) ;
}

#build-project quickstart ;
build-project tutorial ;
if [ python.numpy ]
{
  build-project numpy ;
}

пользователя config.jam

# -------------------
# MSVC configuration.
# -------------------

# Configure specific msvc version (searched for in standard locations and PATH).
using msvc : 14.0 : "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\cl.exe" ;


# ---------------------
# Python configuration.
# ---------------------

# Configure specific Python version.
# using python : 3.6 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ;

using python 
    : 3.6                   # Version
    : C:\\Users\\DiamondExp\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe      # Python Path
    : C:\\Users\\DiamondExp\\AppData\\Local\\Programs\\Python\\Python36-32\\include         # include path
    : C:\\Users\\DiamondExp\\AppData\\Local\\Programs\\Python\\Python36-32\\libs            # lib path(s)
    : <define>BOOST_ALL_NO_LIB=1
    ;

1 ответ

Если вы интересуетесь C++ to Python, вам стоит взглянуть на Pybind11. Это библиотека только для заголовков, основанная на Boost и ориентированная на связывание C++ с Python.

Вы можете скачать все ресурсы здесь.

Это вариант, который я выбрал, когда понял, что настройка библиотеки Python Boost довольно опасна для Windows.

Другие вопросы по тегам