用Python测试C++库

4 投票
2 回答
3457 浏览
提问于 2025-04-16 19:19

我有一个用C++代码编译的libfoo.so库(用gcc编译的),我想快速测试一下里面的一些类(简单来说,就是创建一个类的实例,然后调用它的方法来检查输出)。

虽然我可以在C/C++中写一个主文件,链接这个库来进行测试,但我觉得如果能直接在命令行中调用Python,然后从那里调用这些方法,会简单很多。

我知道可以用ctypes里的CDLL来加载C风格的库,但对于C++库和对象,有没有类似的功能呢?

补充说明:我希望不修改C++代码,直接使用现有的代码。

2 个回答

10

老实说,C++有点乱。你可以创建一个纯C的函数,把C++的功能包装起来,然后从Python调用这个函数,但这样的话,你还不如直接用C++写测试呢。不幸的是,我知道的唯一一个可以做到这一点的工具就是SWIG。

很遗憾,它被称为“简化”的包装器和接口生成器,因为其实一点也不简单。如果你的函数签名里只有非常基础的数据类型(比如,只有整数或者char*),那工作会比较快。否则,你就得告诉SWIG怎么在不同语言之间转换你的数据类型,这样就会变得非常麻烦。而且,过一段时间你会发现,你还得学习CPython的API,才能写出转换数据的代码。

到那时候,你还不如自己写一个CPython的包装器,不用SWIG。你会突然意识到,自己花了一个月的时间在学习一个新的API上,心里会非常沮丧。如果你打算经常这样做,那确实值得花时间去学。不过如果这只是一次性的事情,直接用C/C++写测试就好了。

(我是根据自己的经验说的)

2

我同意Chris的回答。不过,我想提一下,Cython是支持C++的(不过有一些限制)。

撰写回答