环境说明
- 操作系统: Win10 64位;
- 编译器: vs2013 32位 ,
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
; - Python版本:
python-3.4.0.amd64.msi
; - Boost版本:
boost_1_66_0-msvc-12.0-64.exe
。
安装boost和python
双击安装 python-3.4.0.amd64.msi
和 boost_1_66_0-msvc-12.0-64.exe
两个安装包。
Python
Boost
编译boost_python库
1. bootstrap生成方案
MD
进入到 boost_1_66_0
目录,然后直行 bootstrap.bat
脚本。
2. bjam编译boost_python
编译指令
- 编译静态库直行如下命令:
C:\boost_1_66_0>bjam.exe --with-python --prefix=c:/boost stage toolset=msvc
12.0 variant=debug link=static address-model=64 threading=multi runtime-
link=shared
- 编译动态库直行如下命令:
C:\boost_1_66_0>bjam.exe --with-python --prefix=c:/boost stage toolset=msvc
12.0 variant=debug link=shared address-model=64 threading=multi runtime-
link=shared
开始编译
编译静态库,所以执行如下命令:
C:\boost_1_66_0>bjam.exe --with-python --prefix=c:/boost stage toolset=msvc
12.0 variant=debug link=static address-model=64 threading=multi runtime-
link=shared install
编译过程中,会出现如下错误:
vs2013编译boost 时的fatel error C1001 编译器内部错误
用 《VS2013编译boost 1.66:.\boost/type_traits/common_types.h(43) : fatal error C1001: 编译发生内部错误》。
VS2013
对 C++11 SFINAE
特性支持不够有关。(boost 1.60
以上的版本用问题)。
解决办法是更新到vs2013 update5
即可(如果你的vs2013
编译都可能有这个VS2013
已经是update5
是不会遇到这个问题的)。
如果不想更新到 vs2013 update5
怎么办解决呢?
可以利用 bjam
的 cxxflags property
,增加 BOOST_NO_CXX11_VARIADIC_TEMPLATES
宏定义告诉
boost
编译器不支持c++11
的可变参数模板特性。
.\bjam toolset=msvc-12.0 cxxflags=-DBOOST_NO_CXX11_VARIADIC_TEMPLATES
同样的道理在VS2013 update5
以下版本中使用boost
库,也会存在同样的问题,编译时也一样要加上 BOOST_NO_CXX11_VARIADIC_TEMPLATES
宏定义。
正确编译指令
C:\boost_1_66_0>bjam.exe --with-python --prefix=c:/boost stage toolset=msvc 12.0 variant=debug link=static address-model=64 threading=multi runtime-link=shared cxxflags=-DBOOST_NO_CXX11_VARIADIC_TEMPLATES install
编译通过
使用boost_python静态库
boost_python
默认情况下链接的动态库(库名称为 boost_python-vc120-mt-gd-x64-1_66.lib
),程序如果要链接静态库版本的 boost_python
,则程序需要添加 BOOST_PYTHON_STATIC_LIB
预处理宏。这样的话,程序会搜索名称为 libboost_python-vc120-mt-gd-x64-1_66.lib
库了。