c++ - 使用 Python 测试 C++ 库

标签 c++ python shared-libraries

我有一个从 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/

相关文章:

linux - 如何重命名共享库以避免同名冲突?

dll - 为什么有些程序需要 .lib 和 .dll 才能工作

C++回调函数运行时错误

c++ - 从 uint8_t 到 int 的隐式转换出错了,而显式转换顺利

python - 以 10 为基数的 int() 的文字无效 : 'i' : jump program

linux - 在 Ubuntu :libudev. 上运行 32 位 exe 所以:无法打开共享对象文件:没有这样的文件或目录

c++ - Qt 5.5 和 OpenGL : Program behaves strangely without any apparent reason

c++ - 如何在C++程序中设置自定义断点?

python - 如何基于相同类型的现有字典并使用原始名称在适当的位置构建新的 defaultdict(list)

python - 使用virtualenv时如何安装python-devel