私信  •  关注

Wim Lavrijsen

Wim Lavrijsen 最近创建的主题
Wim Lavrijsen 最近回复了
6 年前
回复了 Wim Lavrijsen 创建的主题 » 如何在Python中使用C库?

对于现代C++,使用CPPYY: http://cppyy.readthedocs.io/en/latest/

它基于CLAN,CLAN/LLVM的C++解释器。绑定处于运行时,不需要额外的中间语言。多亏了Clang,它支持C++ 17。

使用pip安装:

    $ pip install cppyy

    $ cat foo.h
    class Foo {
    public:
        void bar();
    };

    $ cat foo.cpp
    #include "foo.h"
    #include <iostream>

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

编译它:

    $ g++ -c -fPIC foo.cpp -o foo.o
    $ g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

使用它:

    $ python
    >>> import cppyy
    >>> cppyy.include("foo.h")
    >>> cppyy.load_library("foo")
    >>> from cppyy.gbl import Foo
    >>> f = Foo()
    >>> f.bar()
    Hello
    >>>

支持自动加载准备好的反射信息和cmake片段来创建大型项目,以便安装包的用户可以简单地运行:

    $ python
    >>> import cppyy
    >>> f = cppyy.gbl.Foo()
    >>> f.bar()
    Hello
    >>>

由于LLVM,高级特性是可能的,例如自动模板实例化。继续示例:

    >>> v = cppyy.gbl.std.vector[cppyy.gbl.Foo]()
    >>> v.push_back(f)
    >>> len(v)
    1
    >>> v[0].bar()
    Hello
    >>>