用Nuitka编译的脚本引发了Segmentation Fault

时间:2016-02-02 20:49:55

标签: python python-2.7 shared-libraries .so nuitka

我有一个脚本' test.py'进口一些' .so'模块并依赖于它们。 ' .so'模块存在于文件夹“编译”中。我已将其绝对路径添加到PYTHONPATH环境变量中。所以,现在当我运行它时 - " $ python test.py" - 它很棒。当我使用Nuitka编译它时 - " $ nuitka --recurse-all test.py" - 它也编译并生成一个' test.exe'可执行文件,现在当我执行它而不是导入模块并正常运行时,它会引发一个“分段错误”

最后,我想补充一点,我已经制作了' .so'使用Nuitka的文件 - 它们基本上都是模块。他们像普通的未编译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

1 个答案:

答案 0 :(得分:1)

确定!所以我的问题已经解决了。事实证明这是内存布局的一些问题,我从这里得到了一些提示:   http://www.freelists.org/post/nuitka-dev/Building-modules-separately-from-the-main-application,3

页面基本上说使用nungka而不是gcc的clang删除了段错误。我打算尝试一下,但我随机输入“nuitka --help”并遇到了这个选项“--lto(链接时优化)”。我想试一试 - 注意,根据--help这需要g ++ - 所以不要运行

nuitka --recurse-all test.py 

我跑了

nuitka --lto test.py

并且生成的二进制文件执行得很好而没有“分段错误”。我也跑了

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

也有效 - 如果你想知道的话。这也被报告为Nuitka错误列表中的错误:

http://bugs.nuitka.net/issue238?@ok_message=msg%201799%20created%0Aissue%20238%20messages%20edited%20ok&@template=item

环境:

Nuitka版本:0.5.18

gcc版本:4.8.4

英特尔corei5上的Ubuntu 14.04 64位