使用OpenMp与ctypes链接

时间:2010-06-24 16:16:26

标签: python c linux ctypes openmp

我有一个使用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

我使用这些cmds:

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

我已经使用Google搜索并找到了''解决方案''online,但我不明白这是什么意思:

我想我应该在构造函数上将resype设置为ctypes.c_void_p 而且我应该在argtypes中设置相应的类型,称为
功能到ctypes.c_void_p。这会导致必要的转换吗? 要发生?我想确认这是正确的方式 接近这种情况。

解决方案意味着什么,或者您是否知道其他方式?

[更新]

所以这是在IulianŞ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

1 个答案:

答案 0 :(得分:3)

尝试添加-lgomp选项以便与openmp库链接。来自here