期待どおりに動作する 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