【问题标题】:Call C/C++ code from Python从 Python 调用 C/C++ 代码
【发布时间】:2023-03-25 00:00:01
【问题描述】:

我目前正在做一个项目,将 Matlab 程序导入 python 以作为插件集成到 ImageJ 中。该程序包含 Mex 文件,源代码是用 C++ 编写的。有没有一种方法可以调用 C++ 函数而不必在 python 中重写它们。谢谢!!!

【问题讨论】:

  • 您究竟想如何调用 C 函数?这些将是哪些功能?它们可以作为 Python 函数使用吗?
  • @ThePathan:我认为,您将无法直接从 Python 调用 MEX 函数。您需要实现所有 MATLAB MEX API 函数,除非您使用 MATLAB,否则这似乎是不可能的。
  • ...查看this question了解更多详情。
  • 更多细节可以在这里找到:Calling C/C++ from python?

标签: python c matlab mex


【解决方案1】:

如果您可以将程序构建为共享库,那么您可以使用ctypes foreign-function 接口来调用您的函数。

与使用 Cython 包装函数或编写自己的 C-API 扩展相比,这通常需要更少的工作(并且更简单),但它的功能也更有限。因此,我建议从 ctypes 开始,如果您发现 ctypes 不适合您的需求,则升级到 Cython。

但是,对于简单的库,ctypes 就可以了(我经常使用它)。

【讨论】:

  • 感谢您的回复!!!环顾四周,似乎 ctypes 是最简单的开始方式。另外,我可以从 ImageJ 环境中导入 ctypes,这对我的项目很重要(该项目是将 Matlab 程序转换为 imageJ 插件)。但是,我从未将任何东西构建为共享库。如果它变得太复杂,我可能会向你寻求帮助。但感谢您的帮助。非常感谢。
  • @ThePathan:不要忘记通过在左侧标记 来选择您最喜欢的答案。
【解决方案2】:

欢迎来到 Stack Overflow!

您需要通过Python C-API 将这些C 函数包装到python C 扩展中,以便它们可以从python 中调用;但是,我可以根据经验告诉您,如果您不知道自己在做什么,这项任务可能会让人头疼。

我建议查看cython。它让编写 C 扩展就像编写 python 代码一样简单!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2012-09-08
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多