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

我使用这些 cmds:

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 的帮助下,这是正确的 cmd 行选项:

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

尝试添加-lgomp选项以与 openmp 库链接。从这里

于 2010-06-24T19:52:53.213 回答