問題タブ [ruby-c-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
49 参照

ruby - Ruby C拡張でrb_cIPSocketを使用することは可能ですか

私は Ruby C 拡張機能の書き方を学んでいますが、最も単純な例を過ぎています。私はソケットで何かを達成しようとしていたので、 の下にクラスを定義する拡張機能を作成しようとしましたrb_cIPSocket

私のCファイルの上部には、次のものがあります。

そして、私は受け取っています:

これはおそらくそうです。ただし、可能なすべてのパスを試しました。

そして、これは私のものextconf.rbです:

等々。ここで実際に何が欠けていますか?そのヘッダー ファイルをインクルードできないのはなぜですか? RVM と Ruby 1.9.3-p448 で OSX を使用しています。ありがとうございました。

0 投票する
1 に答える
540 参照

ruby - C ネイティブ メソッドを既存の Ruby クラスに追加する

C 拡張で記述されたネイティブ メソッドを既存の Ruby クラスに追加する方法を知りたいですか? 新しいRubyクラスを作成できる関数しか見つかりませんでしたが、既存のクラスを返す関数は見つかりませんでした.

0 投票する
1 に答える
338 参照

ruby - gem が私の C エクステンションを自動コンパイルしないのはなぜですか?

C 拡張が必要な​​ Ruby gem をビルドします。これは一度コンパイルされると、Ruby FFI を介して gem にバインドされます。

私のセットアップ: gem の足場に bundle を使用します。gems フォルダー内にサブフォルダーがありますext。これには、静的な Makefile、別のサブフォルダーsource、および extconf.rb が含まれています。

このsourceフォルダーには、すべての .c および .h ファイルが含まれています。

Makefile を動的に作成する必要はありません。すべてをコンパイルすると、gem は期待どおりに動作しmake clean && makeます。ext

ここで、extconf.rb に次の内容を指定します。

そこで、最初に mkmf に Makefile を作成させ、後で静的テンプレートで上書きします。バカ。

gem をビルドrake buildして別のマシンにインストールしようとすると、拡張機能がコンパイルされません。

インストール時に拡張機能を自動的にコンパイルするために何をしなければならないか教えてもらえますか?

0 投票する
1 に答える
504 参照

c++ - Ruby C 拡張機能の C++、ポインターの問題

いくつかの c++ ライブラリを使用する Ruby C 拡張機能を構築しようとしています。問題は、単純な "hello world" を機能させることさえできないことです。

私が得る出力は

私は C/C++ の専門家ではありません。Ruby は私の言語です。Riceで数千行の C++ を問題なくコンパイルしましたが、この特定の拡張機能を Windows でコンパイルしたいので、Rice はオプションではありません。

0 投票する
0 に答える
831 参照

ruby - Ruby C 拡張機能の依存関係

問題

動的ライブラリと静的ライブラリの違いを直感的に理解しています。そうは言っても、サードパーティのライブラリを利用する C 拡張機能を作成しようとしています。このライブラリを静的と動的の両方でコンパイルし、extconf.rb で静的ライブラリを参照しています。明確にするために...

A = サードパーティの動的ライブラリ (理論的には使用されていません)
B = サードパーティの静的ライブラリ (extconf.rb で参照)
C = Ruby C 拡張

ここに問題があります。Ruby コードで C を要求すると、エラーが発生します。A が現在の作業ディレクトリにある場合、このエラーはスローされません。奇妙な。現在の作業ディレクトリに B があると、Ruby が混乱するようで、A を見つけることができません。

理想的には、システムに B がまったく存在しないようにしたいと考えています。私はそれをすべてCに隠したいと思っています。それが静的ライブラリが行うと思っていたことです。これは可能ですか?

コンテキスト

Windows7、Ruby2.0、DevKit、MinGW。サードパーティのライブラリはCGALであり、boost、mpfr、および gmp に依存しています。この拡張機能は、SketchUp の ruby​​ API で使用することを目的としています。SketchUp の Ruby 拡張機能は、SketchUp インターフェイスを介してインストールされます。このインターフェイスは、関連するファイルを選択したディレクトリにコピーしてロードするだけです。私の extconf は次のようになります。

require() の失敗

libCGAL.dll が見つからない場合、次の出力が得られます。現在の作業ディレクトリに配置すると、これが修正されます。

0 投票する
1 に答える
94 参照

c - Ruby C 拡張機能と #system 経由の実行可能ファイルのスポーン

C アプリケーションと対話する Ruby コードがいくつかあります。現在、アプリケーションにデータを渡す必要があるたびに、 Kernel#systemメソッドを使用して実行可能ファイルを生成します。Ruby C 拡張機能を作成する場合と比較して、このアプローチのシステム側の利点/欠点は何ですか。

0 投票する
1 に答える
447 参照

c - C 拡張機能の Ruby キーワード引数

C拡張からRuby 2.0.0のキーワード引数をどのように処理しますか?

バックグラウンド

キーワード引数 (上記のような) は、多数の異なる呼び出しシーケンスまたはオプションを持つメソッドを処理する場合に非常に役立ちます。私は C エクステンション (blit私のプロジェクトでほとんどの OpenGL 描画を処理するメソッド) にそのようなメソッドを 1 つ持っており、そのメソッドで ruby​​ からのキーワード引数をどのように処理するのか疑問に思っています。

アイデア

私が行ったいくつかの調査に基づいて、 C関数の:オプションを介してそのような処理が行われる可能性があると思います。rb_scan_argsただし、それを使用する方法に関する情報は見つかりませんでした。