boost python 使用
2012-09-24 13:46
120 查看
这两天在用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初始化函数。
使用: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初始化函数。
相关文章推荐
- Boost Python 包装C++函数供Python使用时返回值为引用类型的解决方案
- Boost.Python使用小结
- 使用boost实现c++与python的相互调用
- xgboost+python参数介绍的简单使用
- Boost.Python使用小结
- 使用Boost.Python构建混合系统
- boost.python的基本使用方法
- suse 11下编译使用boost-python报错:error: changes meaning of 'keywords' from 'struct boost::python::detail::keywords'
- 使用Boost.Python开发
- 使用Boost.Python
- 使用boost.python进行混合开发
- c++ python交互之boost.python 简集之Vector(map)混合使用
- [转]在OS X 中安装boost.python, 使用homebrew
- XGboost有关参数及其使用(PYTHON)
- c++ python交互之boost.python 简集之Vector(map)混合使用
- boost.python的安装配置和初次使用
- 让主程序可以通过python脚本扩展功能及boost.python的使用
- 使用boostpython小结
- 使用Boost.Python构建混合系统
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现