2009-10-09 35 views

答えて

32

あなたは3つの可能性があります:

1)Rubyはライブラリを読み込むことができます。ちょっとしたことがあっても、独自のローダーを作成してC++ライブラリをRubyにバインドすることができます。 これは、拡張モジュールと呼ばれるものを使用して行われます。 http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html

2)あなたのC++ライブラリの周りにRubyラッパーを生成するツールを使用してください。たとえばSWIG(http://www.swig.org/)を見てください。 swig固有の構文でファイルを作成し、それをSWIGに提供するだけです。 Rubyに含まれる多くの言語のラッパーを生成することができます。

3)は、CORBA/ICE /などのミドルウェアを使用することができます。いくつかのC++関数を呼び出すだけの場合、少し余計になるかもしれませんが、関数をリモート呼び出しするか、ミドルウェアの背後にあるグリッドを「隠す」ことができます。

+0

質問はC++についてですので、1.は関係ありません。 – Magpie

5

私は質問者がRubyでC++を呼び出す方法を尋ねていると思います。もしそうなら、単純なC/C++ RubyInline 1ははるかに簡単な解決策です。

さらにsubstatntial C++コードを呼び出す必要がある場合は、ルビ拡張をビルドすることができます。ここでは、CインタフェースであなたのC++コードをラップしてから(rb_define_methodを使用する方法をルビーするために、これらのC関数をバインドする必要がありgood tutorial

2

はオーレリアンが言ったように、代わりあなたは、SWIGを使用することができます。

11

RubyからC++コードを呼び出すには、拡張機能をビルドする必要があります。

あなたが経験豊富なC++開発者であれば、あなたはライスと快適に感じることがあります。

https://github.com/jasonroelofs/rice

これは、書き込みの拡張機能を簡素化するためにC++メタプログラミング技術を使用しています。

C言語を使用している場合は、ffiを使用することもできます。 C++コードの呼び出しは、名前のマングリングや例外のためにCコードを呼び出すよりも少し複雑です。

+0

ご飯は窓に対応していると思いますか? – Itzik984

+1

私はもともとRice on Windows(mingwとcygwinでテスト済みで、私が回避しなければならなかった興味深いautotoolsのバグに遭遇しました)を書きました。私はもはやそれを維持していないので、最新のバージョンがWindows上で十分にテストされているかどうかはわかりませんが、動作しない理由はありません。 私は最近、IPC(tcp、zeromq、unix socketなど)を使って、C++とインターフェースしています。私がC++ライブラリコードを直接呼び出す必要があったなら、おそらくClingを試してみよう。 –

+0

回答ありがとうございます:) – Itzik984

関連する問題