python에서 C/C++부르기


python에서 C/C++ libaray를 쓰고 싶은데 어떻게 바인딩 하나요?

  • 2016년 01월 08일에 작성됨

조회수 365


1 답변


좋아요
0
싫어요
채택취소하기

예를 들어서 보여드리겠습니다. 다음의 foo.cpp를 python에서 쓰고 싶다고 할 때

foo.cpp)

#include <iostream>

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

python의 ctypeC function에만 접근할 수 있으므로 extern "C"를 써 줍니다(C에서는 안 해주셔도 됩니다)

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

이제 foo.cppshared 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
  • 2016년 01월 08일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close