Windows Boost 1.64 VS2017缺少Python库

时间:2017-04-27 14:23:37

标签: python c++ boost boost-build

我正在尝试使用VS2017在Windows上构建Boost 1.64。一切都构建没有错误,但我的输出libs目录缺少一些.lib.dll s。具体来说,我需要的主要缺失库是Boost.Python。

我最近的建筑尝试看起来像这样,虽然我尝试了很多不同的选项组合:

.\b2 --prefix=c:\boost --build-dir=boost_build --layout=versioned toolset=msvc-14.1 address-model=64 -j4 --with-python -a --reconfigure --stage-dir=stage --build-type=complete --debug-configuration -d2 stage >build.log 2>&1

我的构建输出如下所示:

notice: found boost-build.jam at C:/boost_1_64_0/boost_1_64_0/boost-build.jam
notice: loading Boost.Build from C:/boost_1_64_0/boost_1_64_0/tools/build/src
notice: Searching 'C:\Windows' 'C:\Users\tsanders' 'C:\Users\tsanders' 'C:\boost_1_64_0\boost_1_64_0\tools/build/src' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/kernel' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/util' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/build' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/tools' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/contrib' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/.' for site-config configuration file 'site-config.jam'.
notice: Configuration file 'site-config.jam' not found in 'C:\Windows' 'C:\Users\tsanders' 'C:\Users\tsanders' 'C:\boost_1_64_0\boost_1_64_0\tools/build/src' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/kernel' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/util' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/build' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/tools' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/contrib' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/.'.
notice: Searching 'C:\Users\tsanders' 'C:\Users\tsanders' 'C:\boost_1_64_0\boost_1_64_0\tools/build/src' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/kernel' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/util' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/build' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/tools' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/contrib' 'C:/boost_1_64_0/boost_1_64_0/tools/build/src/.' for user-config configuration file 'user-config.jam'.
notice: Loading user-config configuration file 'user-config.jam' from 'C:/Users/tsanders'.
notice: [python-cfg] Configuring python...
notice: [python-cfg]   user-specified cmd-or-prefix: "C:\Miniconda2\python.exe"
notice: [python-cfg]   user-specified includes: "C:\Miniconda2\include"
notice: [python-cfg]   user-specified libraries: "C:\Miniconda2\libs"
notice: [python-cfg] Checking interpreter command "C:\Miniconda2\python.exe"...
notice: [python-cfg] running command 'DIR /-C /A:S "C:\Miniconda2\python.exe" 2>&1'
notice: [python-cfg] running command 'C:\Miniconda2\python.exe -c "from sys import *; print('version=%d.%d\nplatform=%s\nprefix=%s\nexec_prefix=%s\nexecutable=%s' % (version_info[0],version_info[1],platform,prefix,exec_prefix,executable))" 2>&1'
notice: [python-cfg] ...requested configuration matched!
notice: [python-cfg] Details of this Python configuration:
notice: [python-cfg]   interpreter command: "C:\Miniconda2\python.exe"
notice: [python-cfg]   include path: "C:\Miniconda2\include"
notice: [python-cfg]   library path: "C:\Miniconda2\libs"
notice: [python-cfg]   DLL search path: "C:\Miniconda2"
notice: [python-cfg] Checking for NumPy...
notice: [python-cfg] running command 'C:\Miniconda2\python.exe -c "import sys; sys.stderr = sys.stdout; import numpy; print(numpy.get_include())"'
notice: [python-cfg] NumPy enabled
notice: Searching '.' for project-config configuration file 'project-config.jam'.
notice: Loading project-config configuration file 'project-config.jam' from '.'.
notice: [msvc-cfg] msvc-14.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe'
notice: [msvc-cfg] msvc-12.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe'
notice: [msvc-cfg] msvc-11.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe'
notice: [msvc-cfg] msvc-14.1 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\cl.exe'
notice: will use 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\cl.exe' for msvc, condition <toolset>msvc-14.1
'notice: [generate-setup-cmd] 14.10.25017 is 14.1'
'notice: [generate-setup-cmd] 14.10.25017 is 14.1'
'notice: [generate-setup-cmd] 14.10.25017 is 14.1'
'notice: [generate-setup-cmd] 14.10.25017 is 14.1'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>/<address-model>', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvars32_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>/<address-model>32', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvars32_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>x86/<address-model>', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvars32_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>x86/<address-model>32', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvars32_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>/<address-model>64', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvarsx86_amd64_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>x86/<address-model>64', setup: 'call "C:\Users\tsanders\AppData\Local\Temp\b2_msvc_14.10.25017_vcvarsx86_amd64_.cmd" >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>ia64/<address-model>', setup: 'call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvarsall.bat"  >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>ia64/<address-model>64', setup: 'call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvarsall.bat"  >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>arm/<address-model>', setup: 'call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvarsall.bat"  >nul
'
notice: [msvc-cfg] condition: '<toolset>msvc-14.1/<architecture>arm/<address-model>32', setup: 'call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvarsall.bat"  >nul
'
notice: [zlib] Using pre-installed library
notice: [zlib] Condition
notice: [bzip2] Using pre-installed library
notice: [bzip2] Condition
Performing configuration checks

    - 32-bit                   : yes
    - arm                      : no
    - mips1                    : no
    - power                    : no
    - sparc                    : no
    - x86                      : yes
    - symlinks supported       : yes

Component configuration:

    - atomic                   : not building
    - chrono                   : not building
    - container                : not building
    - context                  : not building
    - coroutine                : not building
    - coroutine2               : not building
    - date_time                : not building
    - exception                : not building
    - fiber                    : not building
    - filesystem               : not building
    - graph                    : not building
    - graph_parallel           : not building
    - iostreams                : not building
    - locale                   : not building
    - log                      : not building
    - math                     : not building
    - metaparse                : not building
    - mpi                      : not building
    - program_options          : not building
    - python                   : building
    - random                   : not building
    - regex                    : not building
    - serialization            : not building
    - signals                  : not building
    - system                   : not building
    - test                     : not building
    - thread                   : not building
    - timer                    : not building
    - type_erasure             : not building
    - wave                     : not building

...found 1 target...

注意事项:

  • 我使用Miniconda而不是传统的Python安装。可能是个问题,虽然--debug-configuration的输出肯定表明它正在找到所有内容。
  • 添加一些调试消息后,我发现它找到的1 targetall目标;我没有看到boost.python源的任何类型的构建输出,就像我看到我是否构建其他库一样。
  • 添加额外的调试输出并不是特别有用;即使有最大的调试输出,我也无法找到任何与Python相关的错误或警告。
  • 我也尝试从boost.python quickstart开始,它成功编译但无法链接,因为找不到boost_python.dll。 (虽然从技术上讲,我认为它应该寻找像boost_python-vc141-mt-1_64.dll ...)
  • 这样的东西

我为bootstrap.bat(例如--with-libraries=python--with-python=C:\Miniconda2\python.exe--with-python-root=C:\Miniconda2)和b2.exe尝试了多种选项组合,但似乎没有任何结果差异。

如果我下载预编译的boost_python库并将它们与我构建的其余库放在一起,我的项目将按预期构建和运行。  自己构建python库是我唯一坚持的事情。

我知道我并不孤单;我在Reddit thread发布了这个问题,另一个用户提到他有同样的问题;不幸的是,他的解决方案是&#34;最终选择了bootstrap和b2&#34;的正确选项。

有没有其他人遇到这样的问题?

2 个答案:

答案 0 :(得分:2)

我最终追溯到我的user-config.jam,我的Python版本未指定。

最初,我有这样的配置:

using python 
    : # version
    : C:\\Miniconda2\\python.exe
    : C:\\Miniconda2\\include
    : C:\\Miniconda2\\libs
    ;

documentation似乎表明离开&#34;版本&#34;空的很好;我认为一个空版本应该意味着&#34;默认版本&#34;或&#34;所有版本&#34;。然而,这导致了无声地跳过构建python库的推动。

在明确指定Python版本时,所有内容都按预期构建:

using python 
    : 2.7                        # version
    : C:\\Miniconda2\\python.exe # interpreter
    : C:\\Miniconda2\\include    # include dir
    : C:\\Miniconda2\\libs       # library dir
    ;

答案 1 :(得分:0)

使用Visual Studio构建python boost 1.64 libs似乎是broken

<boost_root>/‪libs/python/build/Jamfile替换为this

我正在构建它this way

wget.exe https://dl.dropboxusercontent.com/u/59547297/Libraries/boost_1_64_0.zip -OC:\thirdparty\vs2015\x64\boost_1_64_0.zip    
7za.exe x C:\thirdparty\vs2015\x64\boost_1_64_0.zip -oC:\thirdparty\vs2015\x64
xcopy /y boost_1_64_0\Jamfile C:\thirdparty\vs2015\x64\boost_1_64_0\libs\python\build\Jamfile
del C:\thirdparty\vs2015\x64\boost_1_64_0.zip
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
C:
cd C:\thirdparty\vs2015\x64\boost_1_64_0
call bootstrap.bat
b2 --toolset=msvc-14.0 address-model=64 --build-type=complete stage -j 8