2
我有一個使用openmp的c99函數,該函數按預期工作。我還寫了一個使用ctypes的python接口,導致了這個問題。 Ctypes/python找不到openmp的庫。以下是錯誤消息:使用OpenMp與ctypes進行鏈接
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
而且我使用這些CMDS:
gcc -fPIC -std=c99 -lm -Wall -fopenmp -pedantic -c foo.c
gcc -shared -o libfoo.so foo.o
python foo.py
我已經用Google搜索,發現了一個'解決方案'online,但我不明白是什麼意思有:
我想我應該將構造函數的restype設置爲ctypes.c_void_p。
而且我應該在argtypes中設置相應的類型,稱爲
函數爲ctypes.c_void_p。這是否會導致必要的轉換
發生?我想確認一下,這是正確的方式
來處理這種情況。
解決方案意味着什麼?或者您是否知道其他方式?
[更新]
因此,這裏是與尤利安Şerbănoiu的幫助下,正確的CMD行選項:
gcc -fPIC -std=c99 -lm -Wall -fopenmp -pedantic -c foo.c
gcc -shared -lgomp -lrt -o libfoo.so foo.o
python foo.py
這就是我問「你爲什麼不反對OpenMP?」這個愚蠢的問題。 – 2010-06-24 16:31:25
我認爲-fopenmp對OpenMP鏈接,或者我理解錯誤嗎? – Framester 2010-06-24 16:33:04