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 중국어 웹사이트의 기타 관련 기사를 참조하세요!