"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > CTypes를 사용하여 C/C ++ 라이브러리에 대한 Python 바인딩을 효율적으로 생성하려면 어떻게해야합니까?

CTypes를 사용하여 C/C ++ 라이브러리에 대한 Python 바인딩을 효율적으로 생성하려면 어떻게해야합니까?

2025-02-06에 게시되었습니다
검색:631

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

Python 표준 라이브러리의 일부인 CTypes 모듈은이 작업에 안정적이고 널리 사용 가능한 솔루션을 제공합니다. 다른 바인딩 방법과 달리 CTYPES는 컴파일 된 Python 버전에 의존하지 않으므로 다양한 Python 설치와의 호환성을 보장합니다. C :

#로 작성된 다음 코드 스 니펫을 고려하십시오. 클래스 foo { 공공의: void bar () { std :: cout 이것을 Python과 인터페이스하려면 CTYPES가 인식 할 수 있도록 기능을 외부 "C"로 선언해야합니다.

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
#include 

class Foo{
    public:
        void bar(){
            std::cout  마지막으로, 우리는 python 래퍼를 만듭니다 : 

ctypes import cdll. lib = cdll.loadlibrary ( './ libfoo.so') 클래스 foo (Object) : def __init __ (self) : self.obj = lib.foo_new () def bar (self) : lib.foo_bar (self.obj)
#include 

class Foo{
    public:
        void bar(){
            std::cout 이 래퍼를 사용하여 Python의 C 라이브러리와 상호 작용할 수 있습니다 : 

f = foo () f.bar () # 표준 출력에 "hello"인쇄
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3