問題タブ [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.
c - Ruby C 拡張、セグメンテーション違反から回復する方法
簡単な Ruby C 拡張機能を作成しました。メソッドは、2 番目のパラメーターが文字列風の VALUE であることを想定しています。
文字列ではなく整数を渡すと、非常に簡単にセグメンテーション違反が発生します。これをどのように検出し、C メソッドで防止または回復する必要がありますか?
c - #含む動いていない
私は、グーグル、このサイト、および他のいくつかを介してインターネット上でこの情報を見つけるためにいくつかの試みをしました。良いチュートリアルを見つけられない、および/またはそれに答えられないようです。
Visual C++2010でRubyCAPIを使用するにはどうすればよいですか?プロジェクトのインクルードパスにRubyインクルードフォルダーを追加しました。また、Rubydevkitインクルードフォルダーも追加しました。しかし、#include <ruby.h>
それでも見つからずinttypes.h
、devkitパスが追加される前は、他のさまざまなヘッダーファイルを見つけることができませんでした。
私は何が間違っているのですか?
ruby - Ruby C 拡張機能のコンパイル時に外部ライブラリを静的にリンクする方法
Windows で Ruby C 拡張機能を構築しています。これには、いくつかの外部 C ライブラリ、特に libcurl とその依存関係が必要です。curllib dll と .a ファイルがあります。ただし、extconf.rb を使用してビルドすると、常にライブラリが動的にリンクされるため、誰かが curl をインストールし、Windows パスでコンパイル済みの拡張機能を使用する必要があります。代わりに、extconf.rb で curl とその依存関係を静的にリンクして、最初に curllib をパスに追加しなくても Windows で拡張機能を使用できるようにする必要があります。
これは私の extconf.rb です
これは、メイクファイルを生成するコマンドです
extconf.rb ファイルまたはコマンドに追加して、ruby に外部ライブラリを c 拡張機能に静的にリンクさせることができるものはありますか? さらに情報が必要な場合はお知らせください。
objective-c - Cocoa ヘッダーを ruby C 拡張機能にリンクする
Ruby の C 拡張に取り組んでいますがIOBluetooth
、具体的にはフレームワークからヘッダーを含める必要があります。
すべてが正常にコンパイルされますが、実行時に拡張エラーが発生します。
これは、フレームワークがリンク プロセスに含まれていないことに関係があると確信していますが、その理由はわかりません。どんな助けでも大歓迎です
extconf.rb
:
生成された MakeFile: http://paste.wilhall.com/25
更新: ライブラリが静的にリンクするように Makefile を変更しました。同じエラーが引き続き発生しますが、今回はリンク時に発生します。
奇妙なことにhave_header
、私のextconf.rb
ファイルでは、これらのヘッダー ファイルが正常に検出されます。
更新: システム ログ ファイルから以下を取得しました。
私の記憶が正しければ、EXC_BAD_ACCESS (SIGABRT)
多くの場合、GC の問題に関連していますか? それを調べて結果を投稿します
ruby - RubyC拡張機能を「必須」にすることはできません
宝石として構築しているルビーエクステンションがあります。このディレクトリ構造を持っています
私がそれを構築してインストールするとき、エラーはありません、そして、宝石を要求すること(例えば、カウボーイを要求すること)はirbでうまく働きます。
ただし、「ruby test / test_cowboy.rb」を実行すると、requireからロードエラーが発生します(実際には、lib/cowboy.rbにある「require'cowboy/cowboy'」について不平を言っています。
誰かが理由を知っていますか?
ruby - テスト用の ruby c-extension の推奨ビルド方法
を使用してルビジェムを構築していました
ただし、gem をローカル環境から rubygems パスに移動するため、これは gem をテストするための最良の方法ではないようです。
を使用してgemを構築することをお勧めします
? または、より良いプラクティスはありますか?
ruby - スレッドセーフのためのRubyのC拡張にロックメカニズムはありますか?
Python の Py_BEGIN_ALLOW_THREADS と Py_END_ALLOW_THREADS のようなものはありますか?
ruby - Ruby拡張機能、ビッグデータフローをrubyに転送
私のCライブラリは、非常に大きなPOD構造体の配列を生成します。それをRuby側に渡す最も効率的な方法は何ですか?Ruby側では、値の生の配列で問題ありません。
私の現在のソリューションは、各要素とフィールドを別々に保存することで機能し、非常に低速です。プロファイリングは、この関数が平均データでプログラム時間の約15%を要し、計算部分でさえないことを示しました。
について読みましData_Wrap_Struct
たが、必要かどうかわかりません。rawvoid*
を文字列に渡してからRuby側で解凍すると、はるかに高速になりますか?
jruby - jruby (rvm) で pg_ext が「無効な ruby ランタイムに対して初期化された C 拡張機能」をスローする
Ruby-1.9.3-p392 で作業しているプロジェクトがあり、Jruby でロードしようとしています (jruby-head は rvm と共にインストールされ、現在は jruby 1.7.4.dev (1.9.3p392) です)
すべての rake タスクが次のトレースで失敗します
c - Ruby C 拡張機能 rb_str_new2 が false を返すようです
仕事の著作権のために実際のコードを投稿することはできないので、簡単なサンプル コードで問題を示してみます。
簡略化されたバージョンが次のような C 拡張機能を持っています。
次に、これを必要とする Ruby コードは次のようになります。
次に、私の生産プロジェクトで次のように呼び出されます。
これが興味深いことです。このコードを実稼働環境で実行すると、上記の x.test からの戻り値は false です (文字列ではなく、文字通り値 false のように)。また、ファイルへの書き込みは発生しません。ただし、単純化されたテストコードでそれを行うと、期待どおりに文字列「成功」が返され、書き込みは実際に完了します。
この関数が書き込みを実行せず、false を返す状況を知っている人はいますか? rb_raise の 1 つをスローしていた場合に備えて、すでにその周りにレスキューを配置しようとしましたが、そうではないようです。
私と私のチームの他の 3 人のメンバーは、午後中ずっとこれを見てきましたが、答えは見つかりませんでした。