"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso criar eficientemente as ligações de Python para bibliotecas C/C ++ usando ctypes?

Como posso criar eficientemente as ligações de Python para bibliotecas C/C ++ usando ctypes?

Postado em 2025-02-06
Navegar:149

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

interface C/C com Python

A facilidade de uso e extensibilidade do Python o tornam uma linguagem atraente para programadores de todos os níveis. No entanto, há momentos em que a integração com as bibliotecas C/C existentes é desejável. Este artigo explora o método mais eficiente para a construção de ligações Python para essas bibliotecas. Diferentemente de outros métodos de ligação, o Ctypes não depende da versão Python contra a qual foi compilado, garantindo a compatibilidade com várias instalações do Python. classe foo { público: Void Bar () { std :: cout

para interface com Python, devemos declarar as funções como extern "c" para os ctypes reconhecê -los:

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

#include 

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

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

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

do ctypes import cdll lib = cdll.loadlibrary ('./ libfoo.so') classe foo (objeto): def __init __ (self): self.obj = lib.foo_new () Def Bar (self): Lib.foo_bar (self.obj)

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

f = foo () F.Bar () # imprime "Hello" para saída padrão

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3