Это похоже на ошибку (или, по крайней мере, проблему с Python3.7 ).
Я протестировал ваш пример на моем Arch Linux с Python3.7.
Первое, что меня заинтересовало, это то, сколько времени компиляция заняла этот шаг:
gcc -I. -I/usr/include/python3.7m -I/usr/include/python3.7m -Wno-unused-result \
-Wsign-compare -g -fstack-protector-strong -Wformat -Werror=format-security -g \
-fwrapv -O0 -Wall -Wstrict-prototypes -L/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
-L/usr/lib transcendentals.c main.c -lpython3.7m -lpthread -ldl -lutil -lm
У меня не такой уж плохой компьютер, но мне понадобилось несколько минут, чтобы завершить сборку. Странно.
И после запуска ./a.out
я также получил ошибку сегментации, как и вы.
Итак, я решил протестировать (с одной незначительной модификацией: изменить PyInit_transcendentals
на inittranscendentals
в main
) с Python2.7, как показано ниже:
gcc -I. -I/usr/include/python2.7 -I/usr/include/python2.7 -Wno-unused-result \
-Wsign-compare -g -fstack-protector-strong -Wformat -Werror=format-security \
-g -fwrapv -O0 -Wall -Wstrict-prototypes -L/usr/lib/python2.7/config-2.7-x86_64-linux-gnu \
-L/usr/lib transcendentals.c main.c -lpython2.7 -lpthread -ldl -lutil -lm
Компиляция была мгновенной.
Я запустил ./a.out
и вывел:
называется get_e (): 2.718282 вызов get_e ()
пи ** е: 22,459157
Тогда просто чтобы быть уверенным, что это не имеет никакого отношения к каким-либо флагам, которые вы могли бы использовать, а также к тому, что математическая библиотека или что-то еще будет здесь влиять, я повторил тест с очень простым "привет миром" "пример, как показано ниже.
#include <Python.h>
#include "hello.h"
int main() {
Py_Initialize();
inithello();
hello();
Py_Finalize();
return 0;
}
# cython: language_level=2
cdef public hello():
print "hello!"
Тогда
cython hello.pyx
cc -c *.c -I /usr/include/python2.7/
cc -L /usr/lib/python2.7/ -lpython2.7 -ldl *.o -o main
./main
Вывод был
Привет!
С другой стороны, повторная компиляция с Python3.7 (после изменения inithello
на PyInit_hello
) выдает следующий вывод:
cc -c *.c -I /usr/include/python3.7m/
cc -L /usr/lib/python3.7/ -lpython3.7m -ldl *.o -o main
./main
Ошибка сегментации (ядро сброшено)