>백엔드 개발 >파이썬 튜토리얼 >ctypes는 어떻게 Python과 C/C 라이브러리를 원활하게 연결할 수 있습니까?

ctypes는 어떻게 Python과 C/C 라이브러리를 원활하게 연결할 수 있습니까?

DDD
DDD원래의
2024-12-26 18:37:14381검색

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

ctypes를 사용하여 Python에서 C/C 호출

Python과 C/C 사이에 브리지를 설정하려고 할 때 ctypes 모듈은 다음과 같이 나타납니다. 선호하는 선택. Python의 표준 라이브러리와의 원활한 통합으로 안정성과 광범위한 접근성이 보장됩니다. 때때로 문제가 발생할 수 있는 swig와 달리 ctypes는 두 언어 사이에 신뢰할 수 있는 브리지를 제공합니다.

ctypes는 Python에 대한 컴파일 시간 종속성을 처리하는 능력이 뛰어나므로 Python 설치에서 바인딩이 완벽하게 작동할 수 있습니다. 컴파일에 사용된 버전에 관계없이 ctypes를 지원합니다.

사용법을 설명하려면 다음 C 클래스를 고려하세요. Foo:

#include <iostream>

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

ctypes는 C 함수와만 상호 작용할 수 있으므로 이러한 함수를 extern "C"로 선언해야 합니다.

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

마지막으로 Python 래퍼를 만들어 연결:

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)

이 설정을 사용하면 Python에서 C 라이브러리를 쉽게 호출할 수 있습니다.

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

ctypes는 C/C 라이브러리에 대한 Python 바인딩을 구성하기 위한 간단하고 효율적인 솔루션을 제공합니다. , 이러한 프로그래밍 언어 간의 원활한 상호 운용성을 촉진합니다.

위 내용은 ctypes는 어떻게 Python과 C/C 라이브러리를 원활하게 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.