問題タブ [cffi]

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

c++ - OpenCV の C++ インターフェイスを C でラップしてから、それを Lisp の CFFI でラップできますか?

また、OpenCV の C++ インターフェイスを C でラップし、それを Lisp でラップして、cl-opencv ラッパーにすべての C++ 機能を追加できるようにする可能性についても考えていました。私がそれを行う場合、C++ラッパーをlispのCラッパーと一緒に使用できますか....可能であれば、開いているウィンドウのような簡単なサンプルプログラムを見せて、cとc++でのみpicture関数を表示できますか?一緒に.... cvNamedWindow の代わりに cv::namedWindow を使用し、他のすべての部分が c であるように .....これが私の試みであり、cv::namedWindow のみを使用すると以下のプログラムが実行されますが、失敗します

cv::imshow を追加すると

それが実行可能かどうか知りたいです...開始する前に100%確信しているように、少なくともすべてのc ++関数をcでラップし、それをlispでラップすることができます..または、idが障害に遭遇すると思われる場合いくつかの場所または不可能性さえあります...また、それを2回ラップすると遅くなりますか? そして、CインターフェースをC ++よりも優れている/劣っていることを確認します..または、C ++でできることをCインターフェースですべて達成できますか

swig と cffi のドキュメントでは、C++ のサポートは完全ではないと書かれているため、これを尋ねます。

そうそう、私もこれらすべてのヘッダーで上記のコードを実行しようとしました

それでも上記のエラーが発生します

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

c - CFFI で構造体ポインターを含む構造体をラップするにはどうすればよいですか?

IplImage 構造体のドキュメントにはスロットが記述されており、コアヘッダー ファイルで定義されているここIplROI* roiへのポインターのようです。IplROI structtypes_c.h

IplImage* maskROIしかし、それはスロットについても説明しており、コアtypes_c.hファイルにはそのための typedef 構造体はありません...

誰かがそれを見つけるのを手伝ってくれたらありがたいのですが、opencvのダウンロード全体をgrepしましたが、何も見つかりませんでした.....IplImage構造体をlispでラップしようとしていて、swigでラップしてこれを取得しました

ここで少し変えました

したがって、以下のコードを emacs で実行すると (出力とともに表示)、すべてのスロット値がまったく同じコードからの opencv 出力と一致するため、これを使用して ipl-image 構造体で ipl-roi 構造体にアクセスできます。ライン

腸が正しい道を教えてくれるから

しかし、IplImage* maskROI スロットにはラップする構造体がないので、CFFI で構造体ポインターを含む構造体をラップする方法について、誰かが簡単なレッスンを提供してくれることを期待していました。

正しいこととそれを使用する方法

これについて何か助けていただければ幸いです

編集

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

c - この cffi:translate-from-foreign に対して、同等の cffi:translate-into foreign defmethod を作成するにはどうすればよいですか?

わかりました、このtranslate-from-foreignメソッドを試してみましたが、うまくいきました。これらはライブラリのstructs.lispファイルで定義されており、他のすべての依存関係の前に最初にロードされます

CvGetSize と cvCreateImage、get-size と create-image の私の opencv ラッパーは、次のように定義されています。

これが size->int64 の定義です

でも私は translate-foreign defmethod のアイデアが大好きです

だから私はあなたが私のライブラリを本当に素晴らしいものにする方法から以下の外国語への翻訳バージョンを作る方法を示すことができるかどうか疑問に思っていました

私は何かを試して追加するつもりでしたが、get-size 出力構造の場合、それは plist ではないので、何をそこに置くべきか本当にわかりません

一部、

一部、 size->64 関数以外の別の方法を見つけたいと思っていました。これは、cl-opencv https://github.com/ryepup/cl-opencvが最初に出た2年前に作成されたものであり、作成したいそれよりも優れたラッパー...私はすでに cl-opencv を使用して、100 個の新しい関数、5000 行のコード サンプルとドキュメント、および新しい structs.lisp ファイルを追加しました。だから私はint64以外のことをすることができました...さらに、int64がうまくいかない場所をラップする関数があれば、準備ができています

SO のすべての回答者に感謝します。皆さんは本当に私のライブラリを大きく助けてくれました。

編集

わかりました、マデイラ氏としてすべてを以下のように定義したと思います(replセッションを示します)

しかし、私はエラーが発生します

私が持っているtranslate-from-foreign関数は、cv-sizeからの出力を構造体に変換しているためです

translate-in-to-foreign 関数には感謝していますが、古い translate-from-foreign 関数では、make-size 部分のために機能しません... cvCreateImage がそれを満たすために必要なものを理解するのを手伝ってくれませんか ....これがリンク4です:

http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=eimage#createimage

以下のこのバージョンを取得して正しく実行できます(replセッションを表示します)

だから私はipl-imageのスロットからデータを取得しますが、idはget-sizeによってcv-size poiner出力を逆参照できる必要があるため、これは正しい方法のようには見えません

ここに cvGetSize 関数 im ラッピングに関するドキュメントがあります

http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=eimage#getsize

あなたが見ることができるように、それはポインタです

だから私がするとき:

私は得る

そして私がするとき

私は得る

(346539 0)

無意味な出力

ポインターを mem-refing および mem-arefing しようとすると、未処理のメモリ障害エラーが発生します

互換性のある書き込み方法を理解するのを手伝ってもらえれば

外国語からの翻訳

translate-to-foreign 関数私は非常に感謝しています =)。

しかし、make-size または size-width,height をそれらのどこでも使用する場合、create-image には size->int64 が含まれている必要があります。

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

common-lisp - How to set C compiler in defsystem?

I'm trying to loads cl-mpi system with quicklisp. This is the system definition:

#xA;

This fails to compile because it "doesn't know" what $CC is set to. I need it to be set to mpicc. I found the code, where I think it sets it:

#xA;

The above is inside the asdf package. However I can't understand how to change the defsystem to account for the compiler.

PS: This is what the error looks like:

#xA;

formatted for readability. The compiler doesn't find the header because it's not the proper compiler (mpicc "knows" where to look for mpi.h header, it won't be looking in the /usr/include).


Sorry for the confusion. I could set $CC to mpicc, but it still doesn't find /usr/include/mpich-x86_64/mpi.h header - so maybe I need to set include path rather than compiler? If so, how?

This is how I managed to set it to mpicc:

#xA;

before defsystem

EDIT: Whoops, it's cffi that generates the bad include :( which looks like this:

#xA;

instead of:

#xA;

Is there any way to do something about it?


Applying lots of hackery and trickery I could get it working. It appears that the path to the library was set in the code itself, so I had to

#xA;

I also had to make several changes particular to my system to compile the whole thing.

But, I would like this question to be answered in general, if possible! I.e., what is the way to set the C compiler and its options in a generic and acceptable way?

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

windows - CFFI が依存ライブラリをロードしない?

SBCL の BLAS/LAPACK ライブラリを使用しようとしています (具体的には、LLAパッケージを実行しようとしています)。BLAS 共有ライブラリをロードするのに苦労しました。最終的に、依存ライブラリをロードできないことがわかりました。最終的に、すべての依存関係を手動でロードすることで、BLAS をロードすることができました。

回避策として、これはひどいことではありませんが、CFFI:LOAD-FOREIGN-LIBRARY が依存関係自体を見つけてロードできない理由がわかりません。私は何か間違ったことをしていますか?

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

ffi - CFFIとFFIの対比

impnotes 32.3から、clispにはFFIシステムがあることがわかります。http://common-lisp.net/project/cffi/にも CFFI プロジェクトがあります。

知識のある方は、これら 2 つのシステムの重要な違いについて詳しく説明していただけますか? 「より良い」/「より公式」/「推奨」/「より効率的」/「より信頼できる」などはどれですか?

どうもありがとう、R.

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

common-lisp - この Common Lisp/CFFI コードを高速化する方法

ここにコードがあり、想定どおりに機能します。

%vector-int-to-c-array 関数は実際には問題ではありませんが、これを実行する必要があります (上記のコードから):

100 万回の実行には 0.5 秒かかります。関数を実行すると、 param と「unless」式vector-intなしで .68 秒かかります。(v (if (< n 5) :float :int))しかし、上記のように、100 万回の実行に 1.5 秒かかります。ただし、n が 5 未満の場合は :float、n が 5 以上の場合は :int である必要があります。このコードを 100 万回の実行で最大 0.68 秒まで高速化するのを手伝ってくれる人はいますか。唯一の注意点は、cond ステートメントを保持する必要があることです。なぜなら、このコードをここに提示するために削ぎ落としたからです。この部分が加速された後に追加する他の条件があり、vector-intもう一度実行すると、n を変更して更新された n は自動的に計算されます。

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

common-lisp - Common Lisp: これは数値 NIL および &rest パラメータではありません

((pointerp (first args)) (mem-aref (%vector-float-to-c-array (first args)) :float (second args)))以下のコードのこの行で(second args)、警告が表示されてコンパイルされますThis is not a number NIL。関数は機能しますが、Lisp だけを使用して実装に依存しない方法でこの警告を取り除くにはどうすればよいですか。ソリューションは非常に高速である必要があります。コードが正しくなるまでに長い時間がかかり、うまく動作するので、その操作を実際に変更することはできません。認識できない機能は、警告が表示される限り、それほど重要ではありません...助けてくれてありがとう。