Boost.Python:安装使用(兼具Boost.Python库中Python编译版本的修改)

13 篇文章 0 订阅
3 篇文章 0 订阅

(以下是基于VS2015 x64的boost.python环境搭建)
(也适用于编译不同python版本的boost.python问题,boost1.61默认是2.7版的python)


环境搭建

软件:
VS2015(包含C++编译环境)
64位Python 3.6
boost 1.61
安装:

boost.python动态编译库的编译

  1. 首先,去boost官网下载boost源码库,并将其解压到一个目录:D:\ThirdParty\boost_1_61_0。

  2. 然后,编译boost 的编译器 bjam.exe;使用VS2015提供的开发人员工具编译bjam.exe,先把cmd管理员身份运行的目录切换到D:\ThirdParty\boost_1_61_0\tools\build,执行bootstrap.bat文件进行编译,如下图所示。
    cmd

  3. 然后再修改bjam的配置文件;在D:\ThirdParty\boost_1_61_0\tools\build\example目录下,打开user-config.jam配置文件,修改两处,一个是msvc版本,另一个python安装路径和版本。
    msvc
    pythonversion
    因为VS用的是2015版本,所以msvc为14.0,并设置python的包含目录和库目录。在boost整体的编译过程中会使用python的2.7版本进行编译,需要使用其他版本的boost.python就需修改默认参数。

  4. 执行bjam.exe编译命令
    将刚才的bjam.exe 拷贝到 D:\ThirdParty\boost_1_61_0下,准备boost 库的编译。将命令提示符定位到 D:\ThirdParty\boost_1_61_0下,执行 bjam 编译命令。

    建议在执行前先看一下后面关于bjam命令中各个参数的含义)

    a. 编译release版本(x64)

bjam --with-python --prefix=c:\boost stage toolset=msvc-14.0 variant=release link=shared address-model=64 threading=multi runtime-link=shared install

b. 编译debug版本(x64)

bjam --with-python --prefix=c:\boost stage toolset=msvc-14.0 variant=debug link=shared address-model=64 threading=multi runtime-link=shared install

注指令参数:
–prefix设置boost安装目录;
stage表示只生成库文件(dll与lib文件);
toolset指定编译器
variant决定编译什么版本;
link决定使用静态库还是动态库,shared是动态库,static是静态库;
address-model决定地址长度,即32还是64位程序;
threading决定使用单线程(single)还是多线程(multi)库;
runtime-link决定是静态(static)还是动态(shared)链接C/C++标准库;
install会生成包含头文件的include目录。

测试

在VS2015中,新建win32控制台工程,配置Release,平台为x64。并配置python和boost的包含路径和库路径。

C++代码:

#include<iostream>
#include<boost\python.hpp>
#include<Python.h>
using namespace std;
using namespace boost::python;
int main()
{
    Py_Initialize();    // 检查初始化是否成功
    if (!Py_IsInitialized())
    {
        return -1;
    }
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
    object mainModule;
    object mainNamespace;
    try
    {
        mainModule = import("__main__");
        mainNamespace = mainModule.attr("__dict__");
        //要求simple.py与可执行文件在相同路径下! 运行ok
        object simple = exec_file("example.py", mainNamespace, mainNamespace);
        //object result = exec_file("simple.py", global, global);
        object foo = mainNamespace["foo"];
        int val = extract<int>(foo(5));
        object add = mainNamespace["add"];
        string url = extract<string>(add("abc"));
        cout << "Python has caculated add as " << val << endl;
        cout << "Python has caculated foo as " << url << endl;
    }
    catch (...)
    {
        if (PyErr_Occurred())
            PyErr_Print();
    }
    // 关闭Python
    Py_Finalize();
    system("pause");
    return 0;
}

python代码:

# example.py
def add(i=4):
    return i+2008

def foo(url):
    return url

运行结果如下图:
result

* 注:1). 报运行时缺少boost_python3-vc140-mt-1_60.dll动态库文件时,解决办法把boost_python3-vc140-mt-1_60.dll拷贝到项目中执行文件exe同级目录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值