日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python調用C/C++的方法解析

瀏覽:199日期:2022-07-15 08:23:24

Python是解釋性語言, 底層就是用c實現的, 所以用python調用C是很容易的, 下面就總結一下各種調用的方法, 給出例子, 所有例子都在ubuntu9.10, python2.6下試過.

1. Python 調用 C (base)

想在python中調用c函數, 如這兒的fact

#include <Python.h>int fact(int n){ if (n <= 1) return 1; else return n * fact(n - 1);}PyObject* wrap_fact(PyObject* self, PyObject* args){ int n, result; if (! PyArg_ParseTuple(args, 'i:fact', &n)) return NULL; result = fact(n); return Py_BuildValue('i', result);}static PyMethodDef exampleMethods[] ={ {'fact', wrap_fact, METH_VARARGS, 'Caculate N!'}, {NULL, NULL}};void initexample(){ PyObject* m; m = Py_InitModule('example', exampleMethods);}

把這段代碼存為wrapper.c, 編成so庫,

gcc -fPIC wrapper.c -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so庫的目錄, 進入python, 可以如下使用

import example

example.fact(4)

2. Python 調用 C++ (base)

在python中調用C++類成員函數, 如下調用TestFact類中的fact函數,

#include <Python.h>class TestFact{ public: TestFact(){}; ~TestFact(){}; int fact(int n);};int TestFact::fact(int n){ if (n <= 1) return 1; else return n * (n - 1);}int fact(int n){ TestFact t; return t.fact(n);}PyObject* wrap_fact(PyObject* self, PyObject* args){ int n, result; if (! PyArg_ParseTuple(args, 'i:fact', &n)) return NULL; result = fact(n); return Py_BuildValue('i', result);}static PyMethodDef exampleMethods[] ={ {'fact', wrap_fact, METH_VARARGS, 'Caculate N!'}, {NULL, NULL}};extern 'C' //不加會導致找不到initexamplevoid initexample(){ PyObject* m; m = Py_InitModule('example', exampleMethods);}

把這段代碼存為wrapper.cpp, 編成so庫,

g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so庫的目錄, 進入python, 可以如下使用

import example

example.fact(4)

3. Python 調用 C++ (Boost.Python)

Boost庫是非常強大的庫, 其中的python庫可以用來封裝c++被python調用, 功能比較強大, 不但可以封裝函數還能封裝類, 類成員.

http://dev.gameres.com/Program/Abstract/Building%20Hybrid%20Systems%20with%20Boost_Python.CHN.by.JERRY.htm

首先在ubuntu下安裝boost.python, apt-get install libboost-python-dev

#include <boost/python.hpp>char const* greet(){ return 'hello, world';}BOOST_PYTHON_MODULE(hello){ using namespace boost::python; def('greet', greet);}

把代碼存為hello.cpp, 編譯成so庫

g++ hello.cpp -o hello.so -shared -I/usr/include/python2.5 -I/usr/lib/python2.5/config -lboost_python-gcc42-mt-1_34_1

此處python路徑設為你的python路徑, 并且必須加-lboost_python-gcc42-mt-1_34_1, 這個庫名不一定是這個, 去/user/lib查

然后在有此so庫的目錄, 進入python, 可以如下使用

>>> import hello>>> hello.greet()’hello, world’

4. python 調用 c++ (ctypes)

ctypes is an advanced ffi (Foreign Function Interface) packagefor Python 2.3 and higher. In Python 2.5 it is alreadyincluded.

ctypes allows to call functions in dlls/shared libraries and hasextensive facilities to create, access and manipulate simple andcomplicated C data types in Python - in other words: wraplibraries in pure Python. It is even possible to implement Ccallback functions in pure Python.

http://python.net/crew/theller/ctypes/

#include <Python.h>class TestFact{ public: TestFact(){}; ~TestFact(){}; int fact(int n);};int TestFact::fact(int n){ if (n <= 1) return 1; else return n * (n - 1);}extern 'C'int fact(int n){ TestFact t; return t.fact(n);}

將代碼存為wrapper.cpp不用寫python接口封裝, 直接編譯成so庫,

g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

進入python, 可以如下使用

>>> import ctypes>>> pdll = ctypes.CDLL(’/home/ubuntu/tmp/example.so’)>>> pdll.fact(4)12

到此這篇關于Python調用C/C++的方法解析的文章就介紹到這了,更多相關Python調用C/C++的方法內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩免费看片| 日韩精品一区二区三区中文| 婷婷综合网站| 国产精品毛片久久| 精品欠久久久中文字幕加勒比| 日韩精品成人在线观看| 亚洲一区不卡| 99视频精品| 亚洲欧美日本视频在线观看| 久久久国产精品一区二区中文| 蜜桃精品视频| 美女在线视频一区| 伊人久久av| 九一精品国产| 91久久黄色| 热久久免费视频| 中文亚洲欧美| 偷拍欧美精品| 欧美日韩视频| 亚洲一区av| 日韩高清中文字幕一区| 国产日韩欧美一区| 麻豆精品久久久| 福利一区二区| 伊人久久亚洲热| 日本免费在线视频不卡一不卡二| 久久这里只有| 国产精品99久久免费| 成人国产精品久久| 久久国产主播| 日韩一区欧美二区| 麻豆一区二区三| 精品亚洲a∨| 亚洲福利久久| 蜜臀久久99精品久久久画质超高清| 日韩美女精品| 九九色在线视频| 色综合视频一区二区三区日韩 | 欧美日韩亚洲一区| 免费一二一二在线视频| 亚洲精品激情| 久久三级中文| 五月天激情综合网| 国产欧美自拍| 亚洲欧美一区在线| 欧美一区网站| 美女久久一区| 久久久久久美女精品| 国产精品亚洲二区| 中文字幕日韩欧美精品高清在线| 在线人成日本视频| 久久aⅴ国产紧身牛仔裤| 成人一区不卡| 国产精品白丝av嫩草影院| 热久久久久久久| 亚洲精品99| 久久精品国语| 国产成人免费精品| 国产精品亚洲产品| 日韩有吗在线观看| 电影亚洲精品噜噜在线观看| 日韩av三区| 亚洲一区激情| 在线亚洲免费| 精品在线99| 久久蜜桃精品| 久久伊人亚洲| 精品视频网站| 国产一区二区三区成人欧美日韩在线观看| 青草久久视频| 国产精品亚洲四区在线观看| 日韩精品免费视频人成| 日韩一区中文| 国产探花在线精品一区二区| 18国产精品| 国产精品久一| 国产在线观看www| 午夜日韩av| 日韩激情一二三区| 国产精品2023| 特黄特色欧美大片| 久久伦理在线| 久久午夜精品| 免费在线日韩av| 天堂av在线| 国产麻豆综合| 精品国产三区在线| 欧美 日韩 国产一区二区在线视频 | 国产精品国产三级国产在线观看| 亚洲精品在线国产| 亚洲影视一区二区三区| 久久99蜜桃| 国产精品观看| 青青伊人久久| 麻豆精品99| 97国产精品| 精品一区三区| 一区二区亚洲视频| 亚洲欧美日韩视频二区| 亚洲无线观看| 午夜久久av | 鲁大师成人一区二区三区| 999精品在线| 亚洲色诱最新| 香蕉久久一区| 亚洲欧洲高清| 日本大胆欧美人术艺术动态| 婷婷成人av| 91视频久久| 91精品99| 亚洲尤物av| 精品免费av一区二区三区| 91精品电影| 日韩精品视频在线看| 国产在线一区不卡| 98精品久久久久久久| 日韩一区欧美二区| 久久精品免视看国产成人| 日韩在线中文| 日韩中文字幕亚洲一区二区va在线| 国产精品15p| 国产一区二区三区四区五区| 亚洲欧美不卡| 免费在线日韩av| 免费人成网站在线观看欧美高清| 国产精品中文字幕亚洲欧美| 手机在线电影一区| 免费在线观看视频一区| av高清不卡| 久久国内精品| 午夜精品成人av| 欧美伊人久久| 婷婷亚洲成人| 999久久久精品国产| 国产欧美日韩视频在线| 综合一区av| 久久av一区| 九九综合九九| 久久久精品午夜少妇| 久久免费精品| 青青草伊人久久| 亚洲综合欧美| 久久久天天操| 日韩精选在线| 亚洲日本欧美| 麻豆视频在线观看免费网站黄 | 激情五月综合| 精品亚洲自拍| 国产精品视频3p| 国产精品巨作av| 久久一区精品| 成人在线视频免费看| 日韩a一区二区| 国产一区清纯| 最近高清中文在线字幕在线观看1| 亚洲精品乱码久久久久久蜜桃麻豆| 九色精品91| 亚洲青青久久| 国产精品网在线观看| 久久免费福利| 久久亚洲黄色| 久久三级福利| 欧美午夜不卡影院在线观看完整版免费| 国产精品毛片久久| 日韩不卡免费高清视频| 欧美特黄a级高清免费大片a级| 在线亚洲观看| 四虎精品永久免费| 亚州av乱码久久精品蜜桃| 精品三级久久| 亚洲综合不卡| 亚洲我射av| 国产精品久久乐| 国产一区观看| 欧美少妇精品| 女同性一区二区三区人了人一| 日本成人一区二区| 久久精品女人| 国产国产精品| 亚洲精品日韩久久| 国产成人久久精品一区二区三区| 午夜电影亚洲| 欧美韩一区二区| 国产亚洲永久域名| 日本不卡高清视频| 欧美日韩精品一区二区三区在线观看| 动漫av一区| 日韩视频一二区| 精品视频国内| 国产农村妇女精品一二区| 国产精品va视频| 亚洲久久一区| 五月婷婷亚洲| 亚洲性色视频| 欧美国产日韩电影| 午夜久久tv| 国产精品亚洲人成在99www| 国产亚洲亚洲| 久久久蜜桃一区二区人| 免费黄色成人|