2009-10-09 14 views

Respuesta

32

Usted tiene 3 posibilidades:

1) Ruby es capaz de cargar las bibliotecas. Incluso si es un poco complicado, puede decidir escribir su propio cargador y vincular su biblioteca de C++ en Ruby. Esto se hace usando lo que se llama un módulo de extensión . Encontrará un tutorial completo aquí: http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html

2) Puede utilizar una herramienta que generará el envoltorio Ruby alrededor de su biblioteca C++. Mire SWIG por ejemplo (http://www.swig.org/). Solo tiene que crear un archivo en una sintaxis específica para swig y proporcionarlo a SWIG. Luego podrá generar el contenedor para varios idiomas, incluido Ruby.

3) Puede elegir usar un middleware, como CORBA/ICE/lo que sea. Puede que sea un poco exagerado si solo desea llamar a algunas funciones de C++, pero le permitirá llamar de forma remota a las funciones u "ocultar" una cuadrícula detrás del middleware.

+0

La pregunta es acerca de C++, por lo que 1. no es relevante. – Magpie

5

Creo que el que pregunta está preguntando cómo llamar a C++ desde en Ruby, si es así, la simple C/C++ RubyInline 1 es, por lejos, la solución más simple.

Alternativamente, si necesita llamar a un código de C++ más sustancial, puede construir una extensión de ruby. Aquí es un good tutorial

2

Es necesario para envolver su código C++ en una interfaz de C y luego unir las funciones de C al rubí métodos usando rb_define_method()

Alternativamente, puede utilizar el TRAGO, como dijo Aurelien.

11

Para llamar al código de C++ de Ruby, es probable que desee construir una extensión.

Si usted es un experimentado desarrollador de C++, es posible que se sienta cómodo con Arroz:

https://github.com/jasonroelofs/rice

Se utiliza C++ metaprogramación técnicas para simplificar las extensiones de escritura.

Si llamaba a C, también podría usar ffi. Llamar al código C++ es un poco más complicado que llamar al código C debido al cambio de nombre y las excepciones.

+0

alguna idea si el arroz es compatible con las ventanas? – Itzik984

+1

Originalmente escribí Rice on Windows (probado con mingw y cygwin, y me encontré con interesantes errores de autotools que tuve que resolver). Como ya no lo mantengo, no sé si las versiones más recientes están bien probadas en Windows, pero no veo ninguna razón por la que no funcione. Normalmente me comunico con C++ en estos días usando IPC (tcp, zeromq, socket unix, etc.). Si tuviera que llamar directamente al código de la biblioteca C++, probablemente experimentaría con Cling. –

+0

Gracias por la respuesta señor :) – Itzik984

Cuestiones relacionadas