Red de conocimiento informático - Problemas con los teléfonos móviles - Python llama a la función c

Python llama a la función c

Python es un lenguaje interpretado y la capa inferior se implementa en C, por lo que es fácil llamar a C con Python. Los diversos métodos de llamada se resumen a continuación y se dan ejemplos. Todos los ejemplos se han probado en ubuntu9.10 y python2.6.

1.h>

int hecho(int n)

{

si (n <= 1)

devuelve 1;

else

devuelve n * fact(n - 1);

}

PyObject* wrap_fact( PyObject* self, PyObject* args)

{

int n, resultado;

if (!PyArg_ParseTuple(args, "i:fact", &n) )

Devuelve NULL;

resultado = fact(n);

Devuelve Py_BuildValue("i",resultado);

}

PyMethodDef estático exampleMethods[] =

{

{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},

{ NULL, NULL}

};

void initexample()

{

PyObject* m;

m = Py_InitModule("example", exampleMethods);

}

Guarde este código como wrapper.c y codifíquelo como biblioteca

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

Luego, en el directorio con la biblioteca so, Vaya a Python, puede usarlo de la siguiente manera.

ejemplo de importación

example.fact(4)

2. Python llama a C++ (básico)

Para llamar a C++ en Python Para funciones miembro de una clase, llame a la función de hecho en la clase TestFact, de la siguiente manera:

#include

class TestFact{

público :

TestFact(){};

~TestFact(){};

int fact(int n);

} ;

int TestFact::fact(int n)

{

if (n <= 1)

devuelve 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, resultado

if (!PyArg_ParseTuple(args, "i:fact", &n))

Devuelve NULL;

resultado = fact(n);

Devuelve Py_BuildValue("i",resultado);

}

PyMethodDef estático exampleMethods[] =

{

{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},

{NULL , NULL}

};

extern "C" //no agregarlo provocará que no se encuentre initexample

void initexample()

{

PyObject* m;

m = Py_InitModule("example", exampleMethods

}

Guardar esto; codifique como wrapper.cpp y compílelo en la biblioteca so,

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

Luego, en el directorio con la biblioteca so, vaya a python y utilícelo de la siguiente manera

ejemplo de importación

ejemplo .fact(4)

3. Python llama a C++ (Boost.Python)

La biblioteca Boost es una biblioteca muy poderosa. La biblioteca Python se puede utilizar para encapsular C++ para que Python lo llame. Es potente y no solo puede encapsular funciones sino también clases y miembros de clases.

/Program/Abstract/Building%20Hybrid%20Systems%20with%20Boost_Python.CHN.by.JERRY.htm

Primero, instale boost.python en ubuntu, apt-get install libboost -python-dev

#include

char const* saludar()

{

return " hola mundo";

}

BOOST_PYTHON_MODULE(hola)

{

usando el espacio de nombres boost::python;

def("greet", greet);

}

Guarde el código como hello.cpp y compílelo en la biblioteca 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