我有一个从 C++ 代码构建的 libfoo.so 库(使用 gcc 编译),我想快速测试它的一些导出类(基本上,实例化一个类然后调用它的方法来检查输出)。
虽然我可以在 C/C++ 中使用一个链接到相关库的主文件来执行此操作并构建我的测试,但我认为如果可以简单地从命令行调用 Python 并调用那里的方法。
我知道我可以使用 ctypes 中的 CDLL 来加载 C 风格的库,但是 C++ 库和对象是否有类似的功能?
编辑:理想情况下,我不想修改 C++ 代码,我需要按原样使用它。
最佳答案
老实说,C++ 有点乱。你可以做一些事情,比如创建一个包装 C++ 功能的纯 C 函数(然后你从 python 调用),但此时你也可以用 C++ 编写你的测试。不幸的是,(据我所知)唯一的工具是 SWIG。
令人遗憾的是,它被称为“简化的”包装器和接口(interface)生成器,因为它一点也不简单。如果您的签名中有非常原始的数据类型(例如,只是 int 或 char*),这将是一项非常快速的工作。否则你必须告诉 swig 如何在语言之间编码你的数据类型,这很快就会变得非常难看。此外,不久之后您就会意识到您必须学习 CPython API 才能编写您的编码代码。
到那时,您也可以在不涉及 SWIG 的情况下编写自己的 CPython 包装器。您突然意识到您已经花了一个月的时间学习一个新的 API,并且感到非常沮丧。如果您要经常这样做,那绝对值得您花时间。但是,如果这是一次性的事情,只需用 C/C++ 编写测试即可。
(我说的是这里的经验)
关于c++ - 使用 Python 测试 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308649/