python에서 C/C++부르기

조회수 15106회

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

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    예를 들어서 보여드리겠습니다. 다음의 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
    
    • 혹시 죄송합니다만.. *cpp 말고 *.h 파일도 동일한 방식으로 하면 잘 되야되는걸까요? 뭔가 잘 안되는거 같아서요 ㅠㅠ 물먹는하마 2022.5.16 00:08

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)