Связывание с помощью OpenMp с ctypes

У меня есть функция 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 с помощью 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

person Framester    schedule 24.06.2010    source источник
comment
Здесь я задаю глупый вопрос: почему вы не связываетесь с OpenMP?   -  person Ignacio Vazquez-Abrams    schedule 24.06.2010
comment
Я думал -fopenmp ссылается на OpenMP или я что-то не так понял?   -  person Framester    schedule 24.06.2010


Ответы (1)


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

person INS    schedule 24.06.2010