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