[英]segmentation fault - Python -> C
我的代碼是:
#!/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 import
C代碼)。 Cython 不是用於制作獨立的Python程序,而是用於將Python擴展模塊編譯為C。您仍然需要運行Python解釋器才能使用它們。
如果您想將Python代碼編譯為獨立的二進制文件(無論是什么意思-除靜態鏈接的二進制文件外,所有其他二進制文件都對系統庫有依賴性),您可能想看一下這樣的問題: 如何制作Python腳本獨立可執行文件,無需任何依賴即可運行?
您可以使用Nuitka (這是一個Python編譯器),它可以生成我聽說過的好東西的獨立可執行文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.