因为程序要跨平台,所以在Windows下集成测试成功以后,便转到Linux下测试。却发现程序一运行,就提示“段错误”。最后才发现原来是函数名的问题:不能用main。
下面这个程序可以说明这个问题:
环境:FC5
hello.c
wrap.c
用gcc生成testex.so,import以后,执行test.main()以后就会提示“段错误”。
如果你把函数名main改成其他名字,就不会有这样的问题了。
不知道是为什么(windows下用gcc就没有这样的问题),知道的麻烦告诉一下,谢了;)
下面这个程序可以说明这个问题:
环境:FC5
hello.c
#include<stdio.h>
int main(void)
...{
printf("Hello World");
return 0;
}
int main(void)
...{
printf("Hello World");
return 0;
}
wrap.c
#include<python.h>
extern int main(void);
PyObject *testex_main(PyObject *self,PyObject *args)
...{
int result;
result = main();
return Py_BuildValue("i", result );
}
static PyMethodDef testexmethods[] = ...{
...{"main", testex_main,METH_VARARGS,
"print Hello world"},
...{NULL,NULL},
};
void inittestex(void)
...{
Py_InitModule("testex",testexmethods);
}
extern int main(void);
PyObject *testex_main(PyObject *self,PyObject *args)
...{
int result;
result = main();
return Py_BuildValue("i", result );
}
static PyMethodDef testexmethods[] = ...{
...{"main", testex_main,METH_VARARGS,
"print Hello world"},
...{NULL,NULL},
};
void inittestex(void)
...{
Py_InitModule("testex",testexmethods);
}
用gcc生成testex.so,import以后,执行test.main()以后就会提示“段错误”。
如果你把函数名main改成其他名字,就不会有这样的问题了。
不知道是为什么(windows下用gcc就没有这样的问题),知道的麻烦告诉一下,谢了;)