Как лучше всего вызывать код C / C ++ из других языков, таких как Java, PHP, Perl, Python и т. Д.? - PullRequest
5 голосов
/ 08 ноября 2008

Каков наилучший способ вызова C / C ++ из других языков, таких как Java, Python, Perl, PHP и т. Д.?

Ответы [ 4 ]

9 голосов
/ 08 ноября 2008

Из Perl

Инлайн :: C
Инлайн :: CPP
Инлайн :: Java
Инлайн :: Python
Инлайн :: Lua

выдержка из Inline :: C-Cookbook :

use Inline C => <<'END_C';

  void greet() {
    printf("Hello, world\n");
  }
END_C

greet;
2 голосов
/ 08 ноября 2008

Это действительно зависит от языка ... некоторые языки могут напрямую связываться с библиотеками c / c ++, другие, такие как java, должны иметь явно написанные интерфейсы. Если вы пытаетесь решить конкретную проблему, я бы посоветовал вам предоставить более подробную информацию о том, что вы пытаетесь сделать.

2 голосов
/ 08 ноября 2008

Это будет зависеть от языка и того, какую интеграцию вы хотите.

Все эти языки позволят вам выполнить системную команду, чтобы вы могли встроить свой C в исполняемый файл и вызывать его как команду. В Python:

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

Недостатком этого метода является то, что вы не разделяете какое-либо состояние памяти или не возвращаете много информации, и у вас есть накладные расходы на ускорение процесса. С другой стороны, его можно использовать везде, и он очень технологичный.

Каждый язык имеет свой собственный механизм вызова C в рамках одного и того же процесса. Например, Python имеет C API, и вы можете встроить свой C-код в расширение Python. Это обеспечивает очень тесную интеграцию, но требует больше усилий, как для изучения C API, так и для тщательной написания кода, чтобы не допустить утечки памяти.

Python также предоставляет ctypes , который может вызывать C DLL. Это немного проще, чем полное расширение C, но не предоставляет все те же возможности для интеграции.

2 голосов
/ 08 ноября 2008

Используйте Swig, он позволяет генерировать код для нескольких языков, который вызывает любые функции C / C ++. http://www.swig.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...