从其他语言(如 Java、PHP、Perl、Python 等)调用 C/C++ 代码的最佳方法是啥?

Posted

技术标签:

【中文标题】从其他语言(如 Java、PHP、Perl、Python 等)调用 C/C++ 代码的最佳方法是啥?【英文标题】: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++ 的最佳方式是什么?

【问题讨论】:

【参考方案1】:

来自 Perl

Inline::CInline::CPPInline::JavaInline::PythonInline::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,试用了一下,发现它可以很好地解决您的问题域? @kasperjj:见***.com/questions/2572/… 酷...不知道这一点:-) 不幸的是,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 扩展要容易一些,但不能提供所有相同的集成机会。

【讨论】:

以上是关于从其他语言(如 Java、PHP、Perl、Python 等)调用 C/C++ 代码的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

PHP

PHP入门

Php简介

PHP开发

PHP入门

PHP简介