Linux使用Python调用C/C++接口
2014-05-09 08:01
931 查看
C++头文件 pyExt.h:
main.cpp:
c模块中的函数签名一般有下列三种形式:
PyObject* MyFunction(PyObject* self,PyObject* args);
PyObject* MyFunctionWithKeywords(PyObject* self,PyObject* args,PyObject* kw);
PyObject* MyFunctionWithNoArgs(PyObject* self);
继续上面例子,最方便最快捷扩展接口,首先写一个setup.py脚本:
然后执行下述命令进行build:
这会在当前目录下生成一个build子目录,其中包含了中间生成的PyExt.o以及最后生成出来的PyExt.so.
进行安装命令:
或者手动复制到以下目录:
可以开始测试模块了:
shell中命令运行python,import模块名,dir查看被导出函数名:
>>import PyExt
>>dir(PyExt)
>>['__doc__','__file__','__name__','__package__','func']
得知调用函数为func(),测试函数:
view
source
print?
01 | #ifndef PYEXT_H |
02 | #define PYEXT_H |
03 | #include <Python.h> |
04 |
05 | class pyExt |
06 | { |
07 | public : |
08 | pyExt() {} |
09 | ~pyExt() {} |
10 |
11 | static void Foo(); |
12 | }; |
13 |
14 | #endif // PYEXT_H |
01 | #include "pyExt.h" |
02 | #include <iostream> |
03 | using namespace std; |
04 |
05 | void pyExt::Foo() { |
06 | printf ( "printf, Python extensions!!\n" ); |
07 | cout << "cout, Python extensions!!" << endl; |
08 | } |
09 |
10 | static PyObject *func( void ) { |
11 | printf ( "printf, Python extensions!!\n" ); |
12 | cout << "cout, Python extensions!!" << endl; |
13 | return Py_BuildValue( "s" , "Hello, Python extensions!!" ); |
14 | } |
15 |
16 | static PyMethodDef My_methods[] = { |
17 | { "func" , |
18 | { |
19 | }; |
20 |
21 | PyMODINIT_FUNC initPyExt( void ) { |
22 | PyObject *m=Py_InitModule( "PyExt" , My_methods); |
23 |
24 | if (m == NULL) |
25 | return ; |
26 | } |
PyObject* MyFunction(PyObject* self,PyObject* args);
PyObject* MyFunctionWithKeywords(PyObject* self,PyObject* args,PyObject* kw);
PyObject* MyFunctionWithNoArgs(PyObject* self);
继续上面例子,最方便最快捷扩展接口,首先写一个setup.py脚本:
1 | from distutils.core import setup, Extension |
2 | setup(name = 'PyExt' , version = '1.0' , |
3 | ext_modules = [Extension( 'PyExt' , sources = [ 'main.cpp' ])]) |
1 | python . / setup.py build |
进行安装命令:
1 | python . / setup.py install |
1 | sudo cp PyExt.so 到 /usr/ local /lib/python2.7/dist-packages |
shell中命令运行python,import模块名,dir查看被导出函数名:
>>import PyExt
>>dir(PyExt)
>>['__doc__','__file__','__name__','__package__','func']
得知调用函数为func(),测试函数:
view
source
print?
1 | import PyExt |
2 |
3 | def main(): |
4 | PyExt.func() |
5 |
6 | if __name__ = = '__main__' : |
7 | main() |
相关文章推荐
- linux Eclipse上c++调用使用了tensorflow库的python程序遇到的问题及解决方法
- 使用boost.python在python调用C++接口(windows)
- centos7下使用swig扩展python接口来调用c++ 实现声纹识别
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- Python接口(2):使用ctpyes模块在python中调用c++代码
- linux下使用SWIG实现Python调用C++ sdk读取相机图片
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- Linux下利用SWIG完成Python对使用OpenCV的C++文件的调用
- Linux下python调用C++接口实现图片及文件的AES加解密
- Python接口(1):使用Python调用C/C++的种种方法
- (原)python使用ctypes调用C/C++接口
- Python C/C++ 拓展使用接口库(build-in) ctypes 使用手册
- linux基础编程 共享内存 使用内存映射接口mmap系统调用
- c++调用python函数接口
- 如何使用python3调用openstack keystone identity REST api接口获取X-AUTH-TOKEN
- Linux C调用C++库(用C封装C++接口)
- PY++ 自动将你的C++程序接口封装供python调用
- 转载_Linux C调用C++库(用C封装C++接口)
- c++ 调用Python接口小问题
- PY++ 自动将你的C++程序接口封装供python调用