問題タブ [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.
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++ のサポートは完全ではないと書かれているため、これを尋ねます。
そうそう、私もこれらすべてのヘッダーで上記のコードを実行しようとしました
それでも上記のエラーが発生します
c - CFFI で構造体ポインターを含む構造体をラップするにはどうすればよいですか?
IplImage 構造体のドキュメントにはスロットが記述されており、コアヘッダー ファイルで定義されているここIplROI* roi
へのポインターのようです。IplROI struct
types_c.h
IplImage* maskROI
しかし、それはスロットについても説明しており、コアtypes_c.h
ファイルにはそのための typedef 構造体はありません...
誰かがそれを見つけるのを手伝ってくれたらありがたいのですが、opencvのダウンロード全体をgrepしましたが、何も見つかりませんでした.....IplImage構造体をlispでラップしようとしていて、swigでラップしてこれを取得しました
ここで少し変えました
したがって、以下のコードを emacs で実行すると (出力とともに表示)、すべてのスロット値がまったく同じコードからの opencv 出力と一致するため、これを使用して ipl-image 構造体で ipl-roi 構造体にアクセスできます。ライン
腸が正しい道を教えてくれるから
しかし、IplImage* maskROI スロットにはラップする構造体がないので、CFFI で構造体ポインターを含む構造体をラップする方法について、誰かが簡単なレッスンを提供してくれることを期待していました。
正しいこととそれを使用する方法
これについて何か助けていただければ幸いです
編集
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 が含まれている必要があります。
common-lisp - How to set C compiler in defsystem?
I'm trying to loads cl-mpi
system with quicklisp
. This is the system definition:
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:
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
:
before defsystem
EDIT: Whoops, it's cffi
that generates the bad include :( which looks like this:
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?
windows - CFFI が依存ライブラリをロードしない?
SBCL の BLAS/LAPACK ライブラリを使用しようとしています (具体的には、LLAパッケージを実行しようとしています)。BLAS 共有ライブラリをロードするのに苦労しました。最終的に、依存ライブラリをロードできないことがわかりました。最終的に、すべての依存関係を手動でロードすることで、BLAS をロードすることができました。
回避策として、これはひどいことではありませんが、CFFI:LOAD-FOREIGN-LIBRARY が依存関係自体を見つけてロードできない理由がわかりません。私は何か間違ったことをしていますか?
ffi - CFFIとFFIの対比
impnotes 32.3から、clispにはFFIシステムがあることがわかります。http://common-lisp.net/project/cffi/にも CFFI プロジェクトがあります。
知識のある方は、これら 2 つのシステムの重要な違いについて詳しく説明していただけますか? 「より良い」/「より公式」/「推奨」/「より効率的」/「より信頼できる」などはどれですか?
どうもありがとう、R.
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 は自動的に計算されます。
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 だけを使用して実装に依存しない方法でこの警告を取り除くにはどうすればよいですか。ソリューションは非常に高速である必要があります。コードが正しくなるまでに長い時間がかかり、うまく動作するので、その操作を実際に変更することはできません。認識できない機能は、警告が表示される限り、それほど重要ではありません...助けてくれてありがとう。