2015-09-04 55 views
0

我的代碼是:段故障 - 的Python - 「ç

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

然後編譯的C文件使用gcc:

~ $ 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 

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

我使用用Cython將它轉換爲C代碼

而當我試圖執行該文件時,其給出的錯誤:

~ $ ./ostest.so 
Segmentation fault 

我檢查文件的權限:

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

我上面提到的Python代碼僅僅是一個示例。我試着用我寫的其他python程序做同樣的事情。對於他們所有人來說,我都會遇到同樣的錯誤。
如何解決這個問題?

+1

你爲什麼要建立一個共享庫? – Olaf

+2

你可以詳細介紹一下你正在學習的教程嗎?這看起來很奇怪。你爲什麼要構建一個共享庫,然後嘗試通過shell執行它?這並沒有多大意義。 – cel

+1

發佈[mcve]。 – Olaf

回答

3

試圖執行一個共享庫(這是你使用-shared標誌與GCC構建的)將導致分段錯誤。那是因爲你是並不意味着要運行共享庫。看來你誤解了Cython Compilation的說明 - 它明確指出你使用的命令是編譯擴展模塊(C代碼,你可以從Python中得到import)。 Cython是用於製作獨立Python程序的而不是,它用於將Python擴展模塊編譯爲C.您仍然需要運行Python解釋器才能使用它們。

如果您想將您的Python代碼編譯爲獨立的二進制文件(無論這意味着什麼 - 除靜態鏈接的二進制文件之外的所有二進制文件都對系統庫有一些依賴),您可能需要看看這個SO問題:How to make a Python script standalone executable to run without ANY dependency?

您可以使用Nuitka,這是一個Python編譯器,可以生成我已經聽說過很好的獨立可執行文件。