`
乱蓬头199303
  • 浏览: 81633 次
文章分类
社区版块
存档分类
最新评论

Python调用C/C++的种种方法

阅读更多
摘要: Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1.

Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过.

1. Python 调用 C (base)

想在python中调用c函数, 如这儿的fact

#include

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

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"              //不加会导致找不到initexample
void 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, 可以如下使用
http://click.aliyun.com/m/23315/
分享到:
评论

相关推荐

    python调用C/C++ demo

    本篇将详细介绍这两个示例`pyton_C`和`python_C++`所展示的Python调用C/C++的方法。 1. Python调用C:通过`ctypes`库 `ctypes`是Python的标准库之一,它允许我们直接调用C语言编写的动态链接库(.dll或.so文件)。...

    基于python+C/C++开发语音识别的移动机器人路径控制系统+源码(毕业设计&课程设计&项目开发)

    基于python+C/C++开发语音识别的移动机器人路径控制系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python+C/C++开发语音识别的移动机器人路径控制...

    Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库(DLL)是跨语言编程中常见的技术,它允许Python程序利用C或C++编写的高效代码。本篇将详细解释如何实现这一过程。 首先,我们需要了解C/C++动态链接库。DLL(Dynamic Link Library)是一种...

    ubuntu中python调用C/C++方法之动态链接库详解

    # 调用导出的C/C++方法 lib.UO_C_Socket_StartSocketClient.argtypes = [ctypes.c_char_p, ctypes.c_int] lib.UO_C_Socket_StartSocketClient('127.0.0.1', 4121) ``` 通过这种方式,Python程序就可以直接调用C/C++...

    python加载自己写的c/c++程序

    这种方法能够让我们利用C/C++的高效运算能力,同时利用Python的易用性和丰富的生态系统。 在Python中调用C/C++库通常有以下几种方式: 1. **ctypes库**:这是Python标准库的一部分,可以直接加载C编译的动态链接库...

    分别基于Python和C/C++的特征值和特征向量求解源代码(含运行结果和案例说明)

    本资源提供了基于Python和C/C++两种编程语言的特征值和特征向量求解源代码,便于开发者和学习者进行实践操作。 首先,我们来看Python实现。Python以其简洁易读的语法和丰富的科学计算库而被广泛用于数据分析和算法...

    Python使用ctypes调用C/C++的方法

    python使用ctypes调用C/C++ 1. ctpes介绍 ctypes is a foreign function library for Python. It provides C compatible data types, and allows calling functions in DLLs or shared libraries. It can be used to...

    大公司是如何做信息安全管理的 |程序员注意事项 |Java/Python/C语言/C++等项目管理

    大公司是如何做信息安全管理的__程序员注意事项__Java_Python_C语言_C++等项目管理

    python调用C与C++语言.pdf

    在当今信息技术领域中,跨语言编程是一种常见的实践,允许...这些知识点是深入理解和掌握Python与C/C++语言互调技术的基础,尤其对需要在AI和计算机视觉项目中高效率地应用不同语言优势的开发者具有重要的指导意义。

    程序员宝库,开源社区GitHub到底该怎么玩 |如何玩转Github |Java/Python/C语言/C++开源项目聚集地

    程序员宝库,开源社区GitHub到底该怎么玩__如何玩转Github__Java_Python_C语言_C++开源项目聚集地

    C/C++与Python混编的详细文件

    在这个案例中,我们关注的是C/C++与Python的混编,具体是将C/C++编译成动态链接库(.so文件),然后在Python环境中进行调用。下面我们将详细介绍这个过程涉及的知识点。 1. **C/C++动态链接库**:.so文件是Linux...

    基于Python和C/C++语言的西安邮电大学2021级计科卓越班桌面机器人设计源码

    该项目是西安邮电大学2021级计科卓越班开发的桌面机器人“卓越小子”的设计源码,采用Python和C/C++语言编写,共计32个文件。文件类型包括10个UMDL模型文件、5个WAV音频文件、3个Python脚本文件、2个Python编译文件...

    C/C++、matlab、python:生成c动态库,matlab、python调用

    本主题涉及的是如何在C/C++中创建一个动态链接库(DLL),然后在MATLAB和Python环境中调用这个库,实现代码复用和高效计算。我们将讨论C/C++、MATLAB和Python之间的接口技术,以及涉及到的关键步骤。 首先,我们来...

    python,c/c++,java,nodejs,php,go 本地代码运行

    这个工具可能包含了编译和运行C/C++代码的功能,通过接口调用相应的编译器(如GCC或Clang)。 4. **Java**: Java是一种跨平台的面向对象的语言,广泛应用于企业级应用开发。该工具可能集成了JDK,允许用户编写、...

    基于Python和C/C++的智能停车场设计源码

    该项目是一款基于Python和C/C++开发的智能停车场系统源码,总共有55个文件,其中包含16个C语言源文件、15个C头文件、11个图片文件、7个Python脚本文件、2个C++源文件、1个Markdown文件、1个视频处理脚本、1个项目...

    详解python如何调用C/C++底层库与互相传值

    Python调用C/C++底层库是提高程序性能和利用现有C/C++库资源的有效方法。在Python中,可以通过两种主要的方式来实现这一目标:通过`extern "C"`导出和通过Python扩展C/C++代码。 1. **通过`extern "C"`导出(互相...

    Python中调用C++dll例子

    `ctypes`是Python的一个标准库,它允许我们直接调用C语言编译的动态链接库,从而实现了Python与C/C++代码的交互。 首先,我们需要理解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,...

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

    Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1. Python 调用 C (base) 想在python中调用c函数, 如...

    基于Python与C/C++的机器视觉智能垃圾桶机器人设计源码

    本项目为基于Python与C/C++开发的机器视觉智能垃圾桶机器人设计源码,总共有24个文件组成,涵盖了6个Markdown文档、6个头文件、5个YAML配置文件、2个DLL库文件、1个.gitignore文件、1个C源文件、1个目标文件、1个库...

Global site tag (gtag.js) - Google Analytics