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