我的代码是:
#!/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程序一样。对于他们所有人,我得到了同样的错误
怎么解决这个问题?
答案 0 :(得分:3)
尝试执行共享库(这是您通过GCC使用-shared
标志构建的)将导致分段错误。这是因为您并不意味着来运行共享库。您似乎误读了Cython Compilation的说明 - 这清楚地表明您使用的命令是编译扩展模块(C代码,您可以从Python import
)。 Cython 不用于制作独立的Python程序,它用于将Python扩展模块编译为C.您还需要运行Python解释器才能使用它们。
如果你想将你的Python代码编译为一个独立的二进制文件(无论这意味着什么 - 除了静态链接的二进制文件之外的所有二进制文件都有一些系统库的依赖性),你可能想看看这个SO问题:{{ 3}}
您可以使用How to make a Python script standalone executable to run without ANY dependency?,它是一个Python编译器,而不是可以生成我听过的好东西的独立可执行文件。