問題タブ [python-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.
python - 「Cairocffi」のインストールに失敗しました
私はpython3で作業しており、Ubuntuに「cairocffi」をインストールしようとしています。これを行うために、私は正常にインストールしました:
- python-dev
- libffi-dev
- cffi
しかし、「cairocffi」をインストールしようとするとpip install cairocffi
、次のようになりました。
python - distutils で重大なエラーが発生しましたか?
cffi を使用して Python ラッパーを C ライブラリに記述しています。ライブラリをコンパイルできません。distutils が不可解なエラーをスローします。distutils.errors.DistutilsPlatformError "\"GNU was unexpected at this time
Python docsには、このエラーについて厳密には何もありません。
私のセットアップは次のとおりです。 Windows 7 Visual studio C++ 2010
コンソールで python を実行すると、これが出力されます
そして、ツールチェーン環境変数が適切に設定されています
ここで何が起こっているのか理解できません。
python - CFFIを使用したCからPythonへのfftw_complex
C
質問:からFFTW
までの結果を返したいですPython
。結果は type に格納されfftw_complex
ます。私はどのように行いますか?
背景: 私は で作業しており、 を介して呼び出し、結果を に渡そCmake
うとしています。の基本を学ぶためにこれを行います。以下に、長さ のシーケンスで FFT を実行する関数 があります。シーケンスは 型で、実数と虚数のペアを保持する構造体です。私の場合、実部はすべて 1 に等しく、虚部は 0 に等しくなります。FFTW
C
Python
Cmake
int example_FFT(int NUM_POINTS)
NUM_POINTS
fftw_complex
Cmake
test.py, in を使用してコンパイルしPython
、正常にテストに合格できます。
test.py:
Cコード:
私は C にまったく慣れていないので、問題の定式化が正確でなかったことをお詫びします。
python - CFFI は、ライブラリにあるにもかかわらず、関数を見つけることができません
CFFI を使用して共有ライブラリをロードしようとしています。このコードは、C 構造体をインスタンス化し、出力して破棄することを目的としています。
しかし、私はこのエラーが発生しています:
username@Ubuntu1204VB:~/tests/cffi_tests/structure$ python main.py
トレースバック (最新の呼び出しが最後):
ファイル "main.py"、22 行目、
構造内 = lib.CreateStructure()
ファイル "/usr/local/lib /python2.7/dist-packages/cffi/api.py"、810 行目、__getattr__ make_accessor(name)
ファイル内"/usr/local/lib/python2.7/dist-packages/cffi/api.py"、行806、make_accessor accessors[name](name)
ファイル "/usr/local/lib/python2.7/dist-packages/cffi/api.py"、751 行、accessor_function で AttributeError('%s: %s' を発生させます% (name, e))
AttributeError: CreateStructure: "関数 'CreateStructure' がライブラリ './lib/libstructure.so' に見つかりません: ./lib/libstructure.so: 未定義のシンボル: CreateStructure"
そこで、nm -DC を使用して、./lib/libstructure.so の内容を確認しました。
@Ubuntu1204VB:~/tests/cffi_tests/structure$ nm -DC ./lib/libstructure.so
......................... ... w _Jv_RegisterClasses
0000000000000731 T FreeStructure(STRUCTURE*)
0000000000000702 T PrintStructure(STRUCTURE*)
00000000000006bc T CreateStructure()
0000000000201028 A __bss_start
................... .... w __cxa_finalize
................................ w __gmon_start__
0000000000201028 A _edata
0000000000201040 A _end
0000000000000788 T _fini
0000000000000588 T _init
................................ U free
......... ................... U malloc
......................... ....... U printf
CreateStructure があるようです。
そのため、ライブラリをテストするために C メインを作成したところ、機能しました。ただし、共有ライブラリ (./src/structure.cpp) を作成するために使用したソース コードのライブラリとヘッダー (./include/structure.h) を含める必要がありました。
次に、共有ライブラリの作成に使用したソース コードにヘッダーをコピー アンド ペーストしました。Python コードでライブラリと共にそれをロードする方法が見つからなかったため、共有ライブラリを再度ビルドしました。残念ながら、Python の実行中に同じエラーが発生します。これは、欠落している可能性のあるヘッダー ファイルが原因で問題が発生していないことを意味します。
したがって、ffi.dlopen("./lib/libstructure.so") を使用してシンボルをロードした後、python コードからシンボルをチェックして、それらが適切にロードされていることを確認できるかどうかを知りたいです...またはいいえ。
これを行う方法はありますか?ここに欠けているものはありますか?
EDIT : 調査
ソース コードに次の関数を追加しました。
そして、CreateStructure のプロトタイプに対して、ffi.cdef 内の「int main(void)」。
lib.main()... だけを呼び出すと、42 が出力されます... int main(void) を int test(void) に変更して lib.test() を呼び出すと、「undefined symbol: test」というエラーが表示されます。 「...
他の関数の名前を「main」に(一度に1つずつ)変更すると、正常に動作します。あたかも cffi が「main」という名前の関数しか消費できないかのようです...
EDIT : コメントへの回答in
を使用すると、次のエラーが発生します。 make
simple-example/
私はUbuntu 12.04を使用しており、sudo apt-get install clangを使用してclangをインストールしたばかりであることに注意してください。
また、共有ライブラリのコンパイルに使用したメイクファイルは次のとおりです。
cairo - cairocffi が pango でエラーをスローする
このコード cairocffi の最後の行で奇妙なエラーが発生します
ここで何が問題になる可能性がありますか?
python - pypy cffiのcdataのタイプを取得するには?
「a」の値の型を知りたいです。「dir(a)」のようなものを入力しましたが、それを行う方法が見つかりません。以下のような機能が欲しい
しかし、pypy の cffi にこの種の機能があるかどうかはわかりません。誰もこれについて知っていますか?
python - pypy cffi の ffi で利用可能なすべての識別子を一覧表示する方法は?
使用可能な関数名と列挙子名をリストすることができます
ただし、dir(lib) は、定義された typedef と構造体を返しません。
cffi を使用して任意の C ヘッダー ファイルを含む任意のモジュールをロードしようとしたとき、ヘッダー ファイルを解析して、typedef と構造体のリストを取得する必要がありました。同じことを行うより良い方法はありますか?
python-2.7 - Python CFFI メモリ管理の問題
私はUbuntuでプログラミングしていPython 2.7.3
ます.
CFFI を使用して、C コードから取得した値を Python リストに入力しています。
そのリストは非常に大きく、印刷すると約 71,000 文字になります。
C コードは多くのライブラリを使用しています。したがって、次のコードは、何が起こっているのかをよりよく理解するためにのみここに記載されています。
このプログラムは、Wingware IDE を使用して適切に実行されますが*** glibc detected *** python: free(): invalid next size (fast): 0x0000000003b0b080 ***
、コマンド ラインから開始すると、次の直前に glibc エラー ( ) で終了します。
wim の回答を読んだ後、IDE とコマンド ラインの両方が同じインタープリターを使用してコードを実行しているかどうかを確認しました/usr/bin/python
。
編集 (valgrind レポート):
EDIT:
Cデータ構造に関する詳細情報を次に示します。これはそれがどのように見えるかです:
完全な C 構造体を割り当て/割り当て解除する小さな C プログラムを作成しましたがvalgrind
、メモリ リークは見つかりませんでした。
質問:
- 上記の
valgrind
レポートは正確には何を意味するのでしょうか? - プログラムを IDE から実行する場合とコマンド ラインから実行する場合の違いは何ですか?
注: IDE は Python 引数-u (unbuffered)
を使用してプログラムを実行しますが、コマンド ラインに追加しても違いはありません。 - 自分で構造体の割り当てを解除すると、Python のガベージ コレクターが動作しますか?
ffi.gc( c_pDataStructure, c.FreeDataStructure )
代わりに使うべきですか?