python에서 C/C++부르기

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

1답변

  • 좋아요

    1

    싫어요
    채택취소하기

    예를 들어서 보여드리겠습니다. 다음의 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
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.