使用 Nuitka 编译的脚本引发分段错误

Script compiled with Nuitka, raises Segmentation Fault

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

最后,我想补充一点,我也使用 Nuitka 生成了“.so”文件——它们基本上是模块。它们在正常未编译的 python 下工作起来就像梦一样,但是一旦我用 Nuitka 编译 test.py .... KABOOM!

此问题之前已发布:

但是还没有人回答,我不能评论或通知那里的人,因为我刚刚创建了我的帐户,所以我又问了一遍。这是先前询问的版本的 link: 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

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

该页面基本上说使用 clang 和 nuitka 而不是 gcc 可以消除段错误。我正打算尝试一下,但我 运行 经常输入 "nuitka --help" 并遇到了这个选项“--lto(link 时间优化)”。我想试一试 - 注意,根据 --help 这需要 g++ - 所以而不是 运行

nuitka --recurse-all test.py 

我运行

nuitka --lto test.py

并且生成的二进制文件在没有 'segmentation faults' 的情况下执行得很好。我也运行

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

Ubuntu 14.04 64 位英特尔 corei5