【问题标题】:What is the best way to call C/C++ code from other languages such as Java, PHP, Perl, Python, etc?从其他语言(如 Java、PHP、Perl、Python 等)调用 C/C++ 代码的最佳方法是什么?
【发布时间】:2008-11-08 16:39:56
【问题描述】:

从其他语言(如 Java、Python、Perl、PHP 等)调用 C/C++ 的最佳方式是什么?

【问题讨论】:

    标签: java c++ c perl


    【解决方案1】:

    来自 Perl

    Inline::C
    Inline::CPP
    Inline::Java
    Inline::Python
    Inline::Lua

    摘自Inline::C-Cookbook:

    use Inline C => <<'END_C';
    
      void greet() {
        printf("Hello, world\n");
      }
    END_C
    
    greet;
    

    【讨论】:

      【解决方案2】:

      使用 Swig,它允许您为调用任何 C/C++ 函数的多种语言生成代码。 http://www.swig.org/

      【讨论】:

      • 那么,在您提出和回答自己的问题之间的那一分钟,您下载了 swig,试用了一下,发现它可以很好地解决您的问题域?
      • 酷...不知道这一点:-)
      • 不幸的是,swig 并不总是按预期工作,尤其是在像 AIX 这样“奇怪”的 unices 上
      【解决方案3】:

      这真的取决于语言...有些语言可以直接绑定到 c/c++ 库,而其他语言(例如 java)需要编写显式接口。如果您正在尝试解决特定问题,我建议您提供有关您正在尝试做的事情的更多详细信息。

      【讨论】:

        【解决方案4】:

        这将取决于语言以及您想要什么样的集成。

        所有这些语言都允许您执行系统命令,因此您可以将 C 构建为可执行文件,并像命令一样调用它。在 Python 中:

        os.system("myccode -v args etc")
        

        这种方法的缺点是您不共享任何内存状态或返回大量信息,并且您有启动进程的开销。从好的方面来说,它可以在任何地方使用,而且技术含量很低。

        每种语言都有自己在同一进程中调用 C 的机制。例如,Python 具有 C API,您可以将 C 代码构建到 Python 扩展中。这样可以实现非常紧密的集成,但在学习 C API 和仔细编写代码以不泄漏内存方面都需要做更多的工作。

        Python 还提供了ctypes,它可以调用 C DLL。这比完整的 C 扩展要容易一些,但不能提供所有相同的集成机会。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          • 1970-01-01
          • 1970-01-01
          • 2011-02-22
          • 1970-01-01
          相关资源
          最近更新 更多