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