1 답변
-
예를 들어서 보여드리겠습니다. 다음의 foo.cpp를 python에서 쓰고 싶다고 할 때
foo.cpp)
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
python의
ctype
은C function
에만 접근할 수 있으므로extern "C"
를 써 줍니다(C에서는 안 해주셔도 됩니다)extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }
이제
foo.cpp
를shared library
에 컴파일해줍니다g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
이제는 python wrapper에서 코드를 쓸 수 있게 되었습니다.
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) f = Foo() f.bar()
결과)
Hello
댓글 입력