Maison > développement back-end > Tutoriel Python > Comment les ctypes peuvent-ils relier de manière transparente les bibliothèques Python et C/C ?

Comment les ctypes peuvent-ils relier de manière transparente les bibliothèques Python et C/C ?

DDD
Libérer: 2024-12-26 18:37:14
original
470 Les gens l'ont consulté

How Can ctypes Seamlessly Bridge Python and C/C   Libraries?

Appel de C/C depuis Python avec ctypes

Lorsque l'on cherche à établir un pont entre Python et C/C , le module ctypes apparaît comme un choix privilégié. Son intégration transparente avec la bibliothèque standard de Python garantit la stabilité et une accessibilité généralisée. Contrairement à swig, qui peut parfois rencontrer des problèmes, ctypes fournit un pont fiable entre les deux langages.

ctypes excelle dans sa capacité à gérer les dépendances à la compilation sur Python, permettant à vos liaisons de fonctionner parfaitement sur n'importe quelle installation Python qui prend en charge les ctypes, quelle que soit la version utilisée pour la compilation.

Pour illustrer son utilisation, considérons la classe C suivante nommée Foo :

#include <iostream>

class Foo {
public:
    void bar() {
        std::cout << "Hello" << std::endl;
    }
};
Copier après la connexion

Puisque les ctypes ne peuvent interagir qu'avec les fonctions C, vous devez déclarer ces fonctions comme extern "C":

extern "C" {
    Foo* Foo_new() { return new Foo(); }
    void Foo_bar(Foo* foo) { foo->bar(); }
}
Copier après la connexion

Compilez ce code dans une bibliothèque partagée :

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o
Copier après la connexion

Enfin, créez un wrapper Python pour relier la connexion :

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)
Copier après la connexion

Avec cette configuration, vous peut facilement appeler la bibliothèque C à partir de Python :

f = Foo()
f.bar()  # Prints "Hello" on the screen
Copier après la connexion

ctypes fournit une solution simple et efficace pour construire des liaisons Python aux bibliothèques C/C, facilitant ainsi une interopérabilité transparente entre ces langages de programmation.

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!

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