Связывание с использованием OpenMp с ctypes - PullRequest
2 голосов
/ 24 июня 2010

У меня есть функция c99, которая использует openmp, которая работает как положено.Я также написал Python-интерфейс с использованием ctypes, который вызывает проблему.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.Приведет ли это к необходимым преобразованиям
?Я хотел бы получить подтверждение того, что это правильный путь
к этой ситуации.

Что означает решение или вы знаете другой способ?

[обновление]

Итак, вот правильная строка 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 Ответ

3 голосов
/ 24 июня 2010

Попробуйте добавить опцию -lgomp для связи с библиотекой openmp. С здесь .

...