Я использую Python с Swig.
Файл cpp содержит переменную int step=0;
и функция использует переменную void test();
Я получаю ошибку сегментации, когда я вызываю функцию в Python.
Но после того, как я изменил имя переменной на step2
, она работает.
Версия:
Swig 4.0.0
питон 3.6.7
Получается ошибка сегментации:
1.ex.cpp
#include<iostream>
int step = 0;
void test(){
step += 1;
printf("ok\n");
}
2.ex.i
%module ex
%inline %{
extern void test();
%}
3.run
swig -c++ -python ex.i
g++ -fPIC -c ex.cpp -c ex_wrap.cxx -I/home/lzhang/venv/include/python3.6m
g++ -shared ex.o ex_wrap.o -o _ex.so
4. получить ошибку сегментации
$ python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ex
>>> ex.test()
Segmentation fault (core dumped)
Но я меняю только имя переменной:
#include<iostream>
int step2 = 0;
void test(){
step2 += 1;
printf("ok\n");
}
После перекомпиляции работает.
$ python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ex
>>> ex.test()
ok
>>>
Как я могу избежать такого рода ошибок?