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
DDDoriginal
2024-12-26 18:37:14388parcourir

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;
    }
};

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(); }
}

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

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)

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

f = Foo()
f.bar()  # Prints "Hello" on the screen

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:
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