私信  •  关注

Ciro Santilli 新疆改造中å

Ciro Santilli 新疆改造中å 最近创建的主题
Ciro Santilli 新疆改造中å 最近回复了
6 年前
回复了 Ciro Santilli 新疆改造中å 创建的主题 » 如何在Python中使用C库?

ctypes 是标准库的一部分,因此比 swig problems .

对于ctypes,您需要满足对python的任何编译时依赖性,并且绑定将在任何具有ctypes的python上工作,而不仅仅是针对ctypes编译的python。

假设您有一个简单的C++示例类,您想在一个名为Foo.CPP的文件中进行对话:

#include <iostream>

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

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

接下来,您必须将其编译为共享库

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

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() #and you will see "Hello" on the screen