問題タブ [cextension]

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 に答える
2844 参照

python - C Python 拡張機能で Python リストを動的に構築して返す

C で Python 拡張機能を作成しています。拡張機能を使用して Python リストを動的に構築して返す方法を見つけようとしています。Py_BuildValueを使用して所定のサイズのリストを作成する方法を知っています。Py_BuildValue でリストを作成し、そのリストに項目を追加する方法はありますか? 別のより良い代替手段はありますか?

0 投票する
3 に答える
813 参照

python - Py_BEGIN_ALLOW_THREADS の使用時に Python C 拡張機能で gcc 警告を回避する方法

Python C 拡張機能で GIL を操作する最も簡単な方法は、提供されているマクロを使用することです。

これはうまく機能し、コードの大部分については GIL を解放できますが、GIL を必要とする小さなコードについては GIL を再取得します。

問題は、これを gcc でコンパイルすると、次のようになることです。

Py_BEGIN_ALLOW_THREADS は次のように定義されているため:

だから、3つの質問:

  1. gccの警告を抑制することはできますか?
  2. _save宣言の直後に割り当てられているため、gccが初期化されていない可能性があると考える理由を誰かが知っていますか?
  3. 問題を回避するために、1 つのステートメントで変数を宣言して初期化するようにマクロが定義されていないのはなぜですか?

(最後の 2 つは、私自身の好奇心のためだけのものです)。

マクロを使用せず、すべて自分で実行することで問題を回避できますが、むしろ避けたいと思います。

0 投票する
2 に答える
1327 参照

ruby - Perl よりも Ruby の方が C インターフェースを書くのはどのように簡単ですか?

ruby の公式 About ページによると、Perl より C で Ruby を拡張する方が簡単です。私は (perl) XS の専門家ではありませんが、 Inline::Cを使用してすばやく簡単に何かを作成するのは非常に簡単だと思います。では、なぜ Ruby の方が簡単なのでしょうか?

Ruby で C 拡張機能を作成することは、C から Ruby を呼び出すための非常に洗練された API を使用して、Perl や Python よりも簡単です。これには、スクリプト言語として使用するためにソフトウェアに Ruby を埋め込むための呼び出しが含まれます。SWIG インターフェイスも利用できます。

より多くの C 拡張を行う人からのさらなる説明は役に立ちます。

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

ruby - Ruby 1.9 用の C 拡張機能の更新

私が書いていない ruby​​ gem にバインドされたかなり古い C 拡張機能を更新しています。現在、C 拡張機能を使用するスクリプトを実行すると、次のエラーが発生します。

同じライブラリにも問題がありましたがSTR2CSTR、StringValuePtr に置き換えることで修正されました。私の最初の考えは、rb_str2cstr を rb_string_value_ptr に置き換えることでしたが、それを試みると、C 拡張機能がビルドされません。私は決して C プログラマーではありません。これをどこに行けばよいかわかりません。rb_str2cstr をその代替品に置き換える必要があることはわかっていますが、それが何であるかを理解できないようです。

0 投票する
2 に答える
139 参照

ruby - ruby C 拡張機能にデータを格納する - ひどいアイデアかどうか?

私のチームは Ruby で MMO サーバーに取り組んでおり、計算量の多い操作を C 拡張に移行することにしました。その取り組みの一環として、実際のデータ ストレージを C に移動しました (Data_Get_Struct などを使用)。したがって、たとえば、各 Ruby「Zone」オブジェクトには、実際のバイナリ データが格納される「ZoneKernel::Zone」C 構造体が関連付けられています。

基本的に、これはひどい考えなのかどうか疑問に思っています。私は Ruby の内部構造にあまり詳しくありませんが、親 Zone が Ruby 側のメモリ内にとどまっている限り (したがって、C データのガベージ コレクションを防ぎます)、データは問題ないように思われます。

1 つの注意点は、サーバーをクラッシュさせる半定期的な「スタック整合性エラー」が発生していることです。これは、関連するメモリの問題のように思われます (庭のさまざまな segfault ではなく)。 、私もそれをいただければ幸いです!

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

python - Python cassandra-driver: libev を使用するために必要な C 拡張機能が見つかりませんでした

libev4、libev-dev、gcc、python-dev. ただし、インポート中に次のエラーが発生しますLibevConnection

「libev を使用するために必要な C 拡張機能が見つかりませんでした。これはおそらく、ドライバーのインストール時に必要なビルドの依存関係がなかったことを意味します」

再インストールを試み、最新バージョンのドライバーをインストールしても成功しませんでした。Ubuntu 12.04 を使用しています。

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

python - パンダのインポートに関する問題

アナコンダ経由でパンダをインストールしましたが、うまくいったようです。ただし、パンダをインポートしたい場合、次のエラーが発生します。

私はすでにこれを実行しようとしましたが、応答は常に次のとおりです。

間違ったディレクトリにいるのかもしれませんが、どこで実行すればよいかわかりません。調べましsite-packagesたが、パンダなどは見つかりませんでした。

次に、pip経由でパンダを再インストールしました

そしてこの間、次のように言います:

しかし、パンダをインポートすると同じエラーが発生します。

誰でも助けることができますか?私が間違っていることは何ですか?

前もって感謝します

レニ

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

c - C 関数宣言のキャレット (^) とはどういう意味ですか?

qsort の macos ドキュメントには、次の宣言があります。

キャレットの意味は何ですか?