> 백엔드 개발 > 파이썬 튜토리얼 > Python의 ctypes 모듈은 어떻게 C/C 라이브러리와 원활하게 통합될 수 있습니까?

Python의 ctypes 모듈은 어떻게 C/C 라이브러리와 원활하게 통합될 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-11 12:29:11
원래의
651명이 탐색했습니다.

How Can Python's ctypes Module Seamlessly Integrate with C/C   Libraries?

C/C 통합을 위해 Python 활용

Python은 외부 라이브러리와 인터페이스할 수 있는 다양한 기능을 제공합니다. 일반적인 시나리오 중 하나는 Python 내에서 C 또는 C 함수를 호출하는 것입니다. 이를 달성하려면 ctypes 모듈을 배포하는 것이 효과적인 접근 방식입니다. 특정 타사 도구와 달리 ctypes는 Python 표준 라이브러리에 내장되어 있어 안정성이 향상되고 가용성이 광범위하게 보장됩니다.

ctypes를 활용하면 Python에 대한 컴파일 시간 종속성을 피할 수 있습니다. 결과적으로, ctypes가 탑재된 모든 Python 인스턴스는 컴파일 중에 사용된 버전에 관계없이 바인딩을 활용할 수 있습니다.

ctypes의 사용법을 설명하기 위해 foo라는 파일에 정의된 기본 C 클래스인 Foo를 고려해 보겠습니다. cpp:

#include <iostream>

class Foo {
public:
    void bar() {
        std::cout << "Hello" << std::endl;
    }
};
로그인 후 복사

ctype과의 상호 작용을 용이하게 하려면 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()  # Output: "Hello" displayed on screen
로그인 후 복사

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿