2

期待どおりに動作する openmp を使用する c99 関数があります。また、問題の原因となる ctypes を使用して python インターフェイスを作成しました。Ctypes/python は openmp のライブラリを見つけることができません。エラーメッセージは次のとおりです。

File "foo.py", line 2, in <module>
    foobar=cdll.LoadLibrary("./libfoo.so")
  File "/usr/lib/python2.6/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./libfoo.so: undefined symbol: GOMP_parallel_end

そして、私はこれらのコマンドを使用します:

gcc -fPIC -std=c99 -lm -Wall -fopenmp -pedantic -c foo.c
gcc -shared -o libfoo.so foo.o
python foo.py

私はすでにグーグルで「解決策」をオンラインで見つけましたが、次の意味がわかりません。

コンストラクターの restype を ctypes.c_void_p に設定する必要があると思います。
そして、呼び出された
関数の argtypes に対応する型を ctypes.c_void_p に設定する必要があります。これにより、必要な変換
が行われますか?
これがこの状況にアプローチ する正しい方法であることを確認したいと思います。

解決策は何を意味するか、または別の方法を知っていますか?

[アップデート]

したがって、Iulian Şerbănoiu の助けを借りて、正しいコマンド ライン オプションを次に示します。

gcc -fPIC -std=c99 -lm -Wall -fopenmp -pedantic -c foo.c
gcc -shared -lgomp -lrt  -o libfoo.so foo.o
python foo.py
4

1 に答える 1

3

-lgompopenmp ライブラリと連携するためのオプションを追加してみてください。ここから。

于 2010-06-24T19:52:53.213 に答える