Maison > développement back-end > Tutoriel Python > Comment utiliser le code C++ en python

Comment utiliser le code C++ en python

(*-*)浩
Libérer: 2019-07-04 09:20:17
original
4993 Les gens l'ont consulté

Tout le monde sait que les avantages de Python sont une efficacité de développement élevée et une facilité d'utilisation, tandis que le C++ a une efficacité opérationnelle élevée. Les deux peuvent se compléter, qu'il s'agisse d'intégrer du code C++ dans un projet Python ou d'utiliser Python pour implémenter des périphériques. dans une fonction de projet C++, vous devrez peut-être que Python appelle des modules C++

Comment utiliser le code C++ en python

Voici une liste de méthodes pour exporter du code C++ centralisé dans une interface Python. Apprenons ensemble.

Export original (apprentissage recommandé : Tutoriel vidéo Python)

L'interpréteur Python est implémenté en C, donc As tant que notre structure de données C++ peut être comprise par Python, elle peut théoriquement être appelée directement. Nous implémentons test1.cpp comme suit

#include <Python.h>
int Add(int x, int y)
{
return x + y;
}
int Del(int x, int y)
{
return x - y;
}
PyObject* WrappAdd(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Add(x, y));
}
PyObject* WrappDel(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Del(x, y));
}
static PyMethodDef test_methods[] = {
{"Add", WrappAdd, METH_VARARGS, "something"},
{"Del", WrappDel, METH_VARARGS, "something"},
{NULL, NULL}
};
extern "C"
void inittest1()
{
Py_InitModule("test1", test_methods);   
}
Copier après la connexion

La commande de compilation est la suivante

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so
Copier après la connexion

-fPIC : générer du code cible indépendant de la position, adapté à la connexion dynamique ;
- Chemin L : signifie rechercher des fichiers de bibliothèque dans le répertoire chemin, tel que -L signifie rechercher dans le répertoire courant ;
-Chemin I : signifie rechercher des fichiers d'en-tête dans le répertoire chemin ; -o file : spécifie le fichier de sortie en tant que fichier ;
-shared : génère un fichier de bibliothèque partagé

Exécutez l'interpréteur Python et testez comme suit

>>> import test1
>>> test1.Add(1,2)
3
Copier après la connexion

Il y a quelques points à noter ici

Si le nom de la bibliothèque dynamique générée est test1, le fichier source doit avoir la fonction inittest1, et le premier paramètre de Py_InitModule doit être "test1 ", sinon le module d'import Python échouera

S'il s'agit d'un fichier source cpp, la fonction inittest1 doit être modifiée avec extern "C". S'il s'agit d'un fichier source c, ce n'est pas obligatoire. La raison en est que l'interpréteur Python recherchera des fonctions telles que initxxx lors de l'importation de bibliothèques, et C et C++ encoderont différemment les symboles de fonction. C++ prendra en compte la longueur de la fonction et le type de paramètre lors de l'encodage des symboles de fonction. Plus précisément, vous pouvez passer nm test1. vérifiez les symboles de fonction, l'outil c++filt peut décoder le prototype de fonction via les symboles

Pour plus d'articles techniques liés à Python, veuillez visiter la colonne

Tutoriel Python pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal