Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah ctypes Boleh Menjembatani Perpustakaan Python dan C/C dengan lancar?

Bagaimanakah ctypes Boleh Menjembatani Perpustakaan Python dan C/C dengan lancar?

DDD
DDDasal
2024-12-26 18:37:14388semak imbas

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

Memanggil C/C daripada Python dengan ctypes

Apabila ingin mewujudkan jambatan antara Python dan C/C , modul ctypes muncul sebagai pilihan yang diutamakan. Penyepaduan lancarnya dengan perpustakaan standard Python memastikan kestabilan dan kebolehcapaian yang meluas. Tidak seperti swig, yang kadangkala boleh menghadapi masalah, ctypes menyediakan jambatan yang boleh dipercayai antara dua bahasa.

ctypes cemerlang dalam keupayaannya untuk mengendalikan kebergantungan masa kompilasi pada Python, membolehkan pengikatan anda berfungsi dengan sempurna pada mana-mana pemasangan Python yang menyokong ctypes, tanpa mengira versi yang digunakan untuk penyusunan.

Untuk menggambarkan penggunaannya, pertimbangkan kelas C berikut bernama Foo:

#include <iostream>

class Foo {
public:
    void bar() {
        std::cout << "Hello" << std::endl;
    }
};

Memandangkan ctypes hanya boleh berinteraksi dengan fungsi C, anda mesti mengisytiharkan fungsi ini sebagai "C" luaran:

extern "C" {
    Foo* Foo_new() { return new Foo(); }
    void Foo_bar(Foo* foo) { foo->bar(); }
}

Kompilkan kod ini ke dalam perpustakaan kongsi:

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

Akhir sekali, buat pembungkus Python untuk merapatkan sambungan:

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)

Dengan persediaan ini, anda boleh menggunakan perpustakaan C daripada Python dengan mudah:

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

ctypes menyediakan penyelesaian yang mudah dan cekap untuk membina pengikatan Python pada perpustakaan C/C , memudahkan kesalingoperasian yang lancar antara bahasa pengaturcaraan ini.

Atas ialah kandungan terperinci Bagaimanakah ctypes Boleh Menjembatani Perpustakaan Python dan C/C dengan lancar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn