boost python 使用

本文详细记录了解决使用BoostPython给服务器搭建脚本层时遇到的版本冲突问题,以及如何实现C++调用Python脚本的过程。包括从Python3.2切换到Python-2.7.3后脚本能够正常执行的经验分享,以及初始化Python环境、执行文件、导入模块和调用函数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天在用boost python 给服务器搭建一个脚本层,在搭建的过程的过程中,遇到了几个问题。在此记录下,以免以后忘记。

使用:boost_1_51_0  python-2.7.3.msi

1.版本问题。刚开始下载的python 3.2,后来发现程序始终在exec_file出错。折腾了好久,网上查了不少资料,还是没解决,于是换成python-2.7.3后,顺利通过。

不明白为什么。。。

2.编译boost_python-vc90-mt-gd-1_51.dll文件。首先要把project-config.jam里的配置更改下,添加以下几句话,using python 
: 2.7
: c:\\Python27
: c:\\Python27\\include
: c:\\Python27\\libs
;

然后在CMD下用以下命令 bjam --with-python --prefix=d:\boost stage toolset=msvc-10.0 variant=debug link=shared address-model=64 threading=multi runtime-link=shared install

查考:http://www.linuxidc.com/Linux/2011-09/43698.htm

3.C++调用python。

先初始化

Py_Initialize();
char buff[256];
memset(buff,0,256);
::GetCurrentDirectory(256,buff);

char path[256];
memset(path,0,256);


sprintf(path,"%s%s",buff,"\\script\\main.py");


m_Main_module = import("__main__");
m_Main_namespace = (m_Main_module).attr("__dict__");
m_Module = exec_file(path,m_Main_namespace, m_Main_namespace);
object func=(m_Main_namespace)["LoadScriptInfo"];


func();


调用:

object func=(m_Main_namespace)["LoadScriptInfo"];
return  extract<int>(func());


删掉:

Py_Finalize();


4.python 调用C++ 。需单独新建一个.dll工程,把编译后的文件后缀改为.pyd,把生成的.pyd文件和前面生成的boost_python-vc90-mt-gd-1_51.dll拷贝到python目录下的DLLs里。 注意:用 BOOST_PYTHON_MODULE(模块名)初始化模块时,模块名必须等于工程名,否则无法生成正确的.dll初始化函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值