Я пробовал все решения, упомянутые в Интернете, пока ничего не работало для меня.
У меня есть код на Python, чтобы ускорить его, я хочу, чтобы мой код выполнял тяжелые вычисления в функции C. Я уже написал эту функцию C.
Затем, чтобы поделиться библиотекой, я сделал это в терминале:
gcc -shared -Wl,-install_name,testlib.so -o testlib.so -fPIC myModule.c
который не возвращает ошибку. Проблема; появляется, когда я пытаюсь запустить функцию C в python. Пусть рассмотрим следующую простую функцию в C:
int multiplier(int a, int b)
{
int lol = 0;
lol = a*b;
return lol;
}
Я запускаю python3 (3.5.2), а затем:
import ctypes
zelib = ctypes.CDLL("/Users/longeard/Desktop/Codes/DraII/testlib.so",ctypes.RTLD_GLOBAL)
Библиотека должна быть готова к использованию в python:
res = zelib.multiplier(2,3)
При этом он работает, и python возвращает
6
Проблема в том, что функция, которую я хочу использовать (функция множителя, которую я использую только для примера), должна принимать float как входные данные и возвращать float. Но если теперь я рассмотрю ту же функцию множителя, что и раньше, но с float:
float multiplier(float a, float b)
{
float lol = 0.0;
lol = a*b;
return lol;
}
Я перекомпиляю с помощью gcc, я reimport ctypes и повторно делаю ctypes.CDLL, и я делаю в python3:
zelib.multiplier(ctypes.c_float(2),ctypes.c_float(3))
(types.c_float здесь, чтобы преобразовать 2 в python в float в C), python вернет:
2
Это странно, потому что, если я добавлю printf в функцию для печати lol, python напечатает:
6.0
но все же возвращают 2 или 18 иногда. Хотя я печатаю и возвращаю ту же переменную "lol".
Я пробовал много чего, и ничто из этого не сработало. У кого-нибудь есть идея, пожалуйста? Спасибо.