我的代码是:
#!/usr/bin/python
import os
os.system('ls')
我用cython把它转换成C代码:
^{2}$然后用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的说明,它清楚地说明您使用的命令是用于编译扩展模块(可以从Pythonimport
的C代码)。Cython不是用于制作独立的Python程序,而是用于将Python扩展模块编译成C语言。您仍然需要运行Python解释器才能使用它们。在如果您想将Python代码编译为独立的二进制文件(不管这意味着除了静态链接的二进制文件之外的所有二进制文件都依赖于系统库),那么您可能想看看这个问题:How to make a Python script standalone executable to run without ANY dependency?
您可以使用Nuitka,这是一个Python编译器,它可以生成独立的可执行文件,这是我耳熟能详的。在
相关问题 更多 >
编程相关推荐