2016-02-02 57 views
1

我有一個腳本'test.py',它導入了一些'.so'模塊並依賴於它們。 '.so'模塊存在於'COMPILED'文件夾中,該文件夾的絕對路徑已經添加到PYTHONPATH環境變量中。所以,現在當我運行它時 - 「$ python test.py」 - 它運行的很好。當我使用Nuitka編譯它時 - 「$ nuitka --recurse-all test.py」 - 它編譯也生成一個'test.exe'可執行文件,現在當我執行它而不是導入模塊並正常運行時,它會引發一個'Segmentation Fault'用Nuitka編譯的腳本引發了分段錯誤

最後,我想補充一點,我已經使用Nuitka生成了'.so'文件 - 它們基本上都是模塊。他們像一個普通的未編譯python一樣工作,但只要我用Nuitka編譯test.py ... KABOOM!

這個問題之前已經發布時間:

,但沒有得到回答,我不能發表評論或通知某人那裏,因爲我剛剛創建的帳戶,所以我再次問它。這裏的鏈接到以前版本的問道: python package complied with nuitka fails with segmentation fault

Directory Structure: 
/PARENT_FOLDER 
|______/COMPILED: <---- this folder contains all the '.so' files 
|  file1.so 
|  file2.so 
|  . 
|  . 
|______test.py <---- here is the test.py script 
+0

一個SIGSEGV可能會導致很多事情,只是因爲前面的問題提出了同樣的問題不是我同樣的原因。沒有來源,我懷疑任何人都可以回答。就我個人而言,我會嘗試追蹤C++中的錯誤,然後從那裏開始工作。使用'gdb'查看核心轉儲。 – cdarke

+0

或者,如果您不瞭解C++,請嘗試減少'test.py'代碼以找出問題。 – cdarke

+0

謝謝你的回覆@cdarke :)。我很抱歉,但我沒有提到作者在上一個問題上評論了他已經解決了這個問題的答案之一,但他沒有提到如何。這就是我問的原因。儘管如此,我會給gdb一個嘗試。和平! –

回答

1

好!所以我的問題已經解決了。原來,這是一些問題與內存佈局和東西,我從這裏得到了一些提示: http://www.freelists.org/post/nuitka-dev/Building-modules-separately-from-the-main-application,3

該頁面基本上說,使用clang與nuitka而不是gcc刪除段錯誤。我打算試試,但我隨機鍵入「nuitka --help」,並遇到了這個選項「--lto(link time optimizations)」。我想給它一個嘗試 - 請注意,根據--help這需要G ++ - 所以不是運行

nuitka --recurse-all test.py 

我跑

nuitka --lto test.py 

產生的二進制執行沒有「分割就好了故障。我也跑

nuitka --recurse-all --lto test.py 

這也適用 - 如果你想知道。這也被報告爲Nuitka的bug列表上的錯誤:

http://bugs.nuitka.net/[email protected]_message=msg%201799%20created%0Aissue%20238%20messages%20edited%20ok&@template=item

環境:

Nuitka版本:0.5.18

gcc版本:4.8.4

的Ubuntu 14.04 64位英特爾corei5