«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу эффективно создать привязки Python для библиотек C/C ++ с помощью CTYPE?

Как я могу эффективно создать привязки Python для библиотек C/C ++ с помощью CTYPE?

Опубликовано в 2025-02-06
Просматривать:937

How Can I Efficiently Create Python Bindings for C/C   Libraries Using ctypes?

взаимодействие C/C с python

простота использования и расширяемость Python делает его привлекательным языком для программистов всех уровней. Тем не менее, бывают случаи, когда интеграция с существующими библиотеками C/C желательна. В этой статье рассматривается наиболее эффективный метод для построения привязки Python для этих библиотек. В отличие от других методов привязки, CTYPES не полагается на версию Python, против которой она была скомпилирована, обеспечивая совместимость с различными установками Python.

] рассмотрите следующий фрагмент кода, написанный в C:

#include класс foo { публика: void bar () { std :: cout

#include 

class Foo{
    public:
        void bar(){
            std::cout  

extern "c" {{ Foo* foo_new () {return new foo (); } void foo_bar (foo* foo) {foo-> bar (); } }

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

g -c -fpic foo.cpp -o foo.o g -shared -wl, -soname, libfoo.so -o libfoo.so foo.o

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

из Ctypes import cdll lib = cdll.loadlibrary ('./ libfoo.so') класс foo (объект): def __init __ (self): self.obj = lib.foo_new () def Bar (Self): lib.foo_bar (self.obj)

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)

f = foo () f.bar () # Печать «Привет» на стандартный выход

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3