python - 段错误 - Python -> C

标签 python c gcc segmentation-fault cython

我的代码是:

#!/usr/bin/python
import os
os.system('ls')

我使用 cython 将其转换为 C 代码:

~ $ cython ostest.py
~ $ ls ostest*
ostest.c  ostest.py

然后使用gcc编译C文件:

~ $ gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing \-I/usr/include/python2.7 -o ostest.so ostest.c
~ $ ls ostest*
ostest.c  ostest.py  ostest.so

当我尝试执行该文件时,出现错误:

~ $ ./ostest.so
Segmentation fault

我检查了文件权限:

~ $ ls -l ostest.so
-rwxr-xr-x

我上面提到的 python 代码只是一个示例。我尝试对我编写的其他 python 程序做同样的事情。对于所有这些,我都遇到了同样的错误。
如何解决?

最佳答案

尝试执行共享库(这是您通过使用 GCC 的 -shared 标志构建的库)将导致段错误。那是因为您不打算运行共享库。看来您误读了 Cython Compilation 的说明——它清楚地表明您使用的命令是用于编译扩展模块(您可以从 Python 导入 的 C 代码)。 Cython 不是用于制作独立的 Python 程序,它用于将 Python 扩展模块编译为 C。您仍然需要运行 Python 解释器才能使用它们。

如果你想将你的 Python 代码编译成一个独立的二进制文件(无论那是什么意思——除了静态链接的二进制文件之外的所有二进制文件都对系统库有一定的依赖性),你可能想看看这个 SO 问题:How to make a Python script standalone executable to run without ANY dependency?

您可以使用 Nuitka ,这是一个 Python 编译器,可以生成我听说过的独立可执行文件。

关于python - 段错误 - Python -> C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32399922/

相关文章:

python - 从 2 个 json api 创建 json 并应用于每个轴的函数

c - 编写 "isTriangular"函数,该函数接受一个正整数,如果给定的数字是三角形数,则返回 1;返回 0,否则

c++ - 为什么 C 和 C++ 中 ` struct T{ double x};` 的输出不同?

c - 参数长度可变的宏

c - 在 gcc 中编译时 undefined reference

python - python的pp模块上的PicklingError

python - 为什么在 python 中允许浮点切片 (slice(0,1,0.1)),但调用索引方法 (slice(0,1,0.1).indices) 会引发 TypeError?

c - 使用指针访问数组

MacOS 上的 Python3、gcc 和 clang

python - 获取边界框opencv的上中心